我有一个像这样的TypeScript类:
personName
是自定义过滤器,在此示例中无法在视图/模板上使用代码:
export class Person {
private $filter;
private name: string;
private sureName: string;
constructor($filter: ng.IFilterService, name: string, sureName: string) {
this.$filter = $filter;
this.name = name;
this.sureName = sureName;
}
public getName(): string {
return this.$filter('personName')(this.name, this.sureName);
}
}
这可以在控制器中使用,如下所示:
export class PeopleController {
private $filter: ng.IFilterService;
private person1 = new Person(this.$filter, 'Joe', 'Smith');
private person2 = new Person(this.$filter, 'John', 'Doe');
// ...
// private person100 = new Person(this.$filter, ...)
constructor($filter: ng.IFilterService) {
this.$filter = $filter;
}
}
angular.module('myApp').controller('PeopleController', PeopleController);
是否可以在没有Person
的情况下重写$filter
课程?换句话说,我可以使用依赖注入将Person
类编写为Angular工厂,然后将此工厂注入控制器并创建实例吗?
我想要这样的事情:
export class PeopleController {
private PersonFactory: Person;
private person1 = new PersonFactory('Joe', 'Smith');
private person2 = new PersonFactory('John', 'Doe');
// ...
// private person100 = new Person(...)
constructor(PersonFactory: Person) {
this.PersonFactory = PersonFactory;
}
}
angular.module('myApp').factory('PeopleFactory', People);
angular.module('myApp').controller('PeopleController', PeopleController);
答案 0 :(得分:1)
您可以创建一个工厂来注入 $ filter 服务并返回一个接受其余参数并返回人的函数
它看起来像这样。
interface PersonFactory {
(name: string, surname: string): Person
}
angular.module('mymodule').factory('PersonFactory', function($filter: ng.IFilterService): PersonFactory {
return function(name: string, surname: string): Person {
return new Person($filter, name, surname);
}
});
您将能够像这样使用它:
angular.module('myModule').controller('SomeCtrl', function(PersonFactory: PersonFactory) {
let p = PersonFactory('John', 'Smith');
});