Ich versuche, einen benutzerdefinierten Filter von einem Angular-Controller aufzurufen, aber ich erhalte den Fehler: 'Kann keinen Ausdruck aufrufen, dessen Typ fehlt eine Signatur ".Der Versuch, benutzerdefinierte Filter aufzurufen, führt zu einem Fehler TS2349: Kann keinen Ausdruck aufrufen, dessen Typ keine Anrufsignatur enthält.
Ich habe es so bei dem letzten Projekt, an dem ich gearbeitet habe, implementiert, so dass ich nicht weiß, was falsch ist.
Der Filter enthält zu diesem Zeitpunkt keine Logik, da ich ihn zuerst kompilieren muss. Hier
ist der Filter:
/// <reference path="../../typings/reference.ts" />
module app {
'use strict';
/**
* Filter models
*/
export class ModelFilter {
public static Factory() {
return function(input: string) {
console.log(input);
return input;
}
}
}
angular.module('app')
.filter('modelFilter', [ModelFilter.Factory]);
}
Und die Steuerung, wo es heisst:
/// <reference path="../../typings/reference.ts" />
module app {
'use strict';
interface ISearchController {
vehicles: IVehicles;
models: any;
setVehicles(): void;
updateModels(make: string): void;
}
class SearchController implements ISearchController {
static $inject = [
'VehicleMakeService',
'VehicleModelService',
'$filter'
];
constructor(private vehicleMakeService: VehicleMakeService,
private vehicleModelService: VehicleModelService,
private $filter: ng.IFilterService,
public vehicles: IVehicles,
public models: any) {
this.setVehicles();
}
setVehicles(): void {
this.vehicleMakeService.getVehicles().then((data) => {
this.vehicles = data;
});
}
updateModels(make: string): void {
var test = this.$filter('modelFilter')(make); // Error here
}
}
angular.module('app').controller('SearchController', SearchController);
}
reference.ts:
/// <reference path="./tsd.d.ts" />
//grunt-start
/// <reference path="../app/app.config.ts" />
/// <reference path="../app/app.module.ts" />
/// <reference path="../app/app.route.ts" />
/// <reference path="../app/home/home.controller.ts" />
/// <reference path="../app/home/home.route.ts" />
/// <reference path="../app/models/vehicles.model.ts" />
/// <reference path="../app/results/results.controller.ts" />
/// <reference path="../app/results/results.route.ts" />
/// <reference path="../app/services/cars.service.ts" />
/// <reference path="../app/services/vehicles.make.service.ts" />
/// <reference path="../app/services/vehicles.models.service.ts" />
/// <reference path="../app/templates/search.controller.ts" />
/// <reference path="../app/templates/search.filter.ts" />
//grunt-end
tsd.d.ts:
/// <reference path="angularjs/angular.d.ts" />
/// <reference path="jquery/jquery.d.ts" />
/// <reference path="angular-ui-router/angular-ui-router.d.ts" />
/// <reference path="angularjs/angular-resource.d.ts" />
Ich habe Ihre Lösung versucht, aber ich bekomme genau den gleichen Fehler. FYI, Referenz .ts wird mit grunt-ts erstellt, die einen Verweis auf tsd.d.ts enthält, der den Verweis auf angular.d.ts enthält, also enthält reference.ts grundsätzlich einen Verweis auf alle ts-Dateien in der Anwendung die eindeutig typisierten Dateien. Ich habe meine Frage aktualisiert, um dies zu zeigen. – AngularBoy
Können Sie Ihren modifizierten Code in einem Pastebin posten? –
Ich verwende TypeScript 1.6.2. Wie auch immer, du kannst Code von hier https://pastee.org/5hfp auf http://www.typescriptlang.org/Playground setzen, um zu sehen, dass es funktioniert. –