我有一个自定义管道和一个指令,我想在它们之间共享一些数据。我创建了一个应该处理它的服务。 我收到以下错误:
错误:没有MyService的提供商
以下是代码:
@Injectable()
export class MyService {
private data: any;
get Data():any {
return this.data;
}
set Data(d: any) {
this.data = d;
}
}
指令应该提供服务:
@Directive({
selector: '[my-directive]',
providers: [MyService],
})
export class MyDirective {
constructor(private serv: MyService) {}
}
当在同一组件上使用时,管道也应该获得服务:
@Pipe({
name: 'myPipe'
})
export class MyPipe {
constructor(private serv: MyService) {}
transform(value: any) {
return value + 'foo';
}
}
这用于例如这样的输入:
<input [value]="text | myPipe" my-directive />
在我阅读DI上的angular2文档并搜索了这个主题之后,我找不到任何我做错的事。据我所知,这应该工作。任何想法为什么不?
ps:使用角度2.x和Ionic2
答案 0 :(得分:0)
尝试将providers数组添加到具有此管道指令的组件中。我认为它应该有用。
答案 1 :(得分:0)
您可以在ngModule.providers中声明您的服务,稍后只需要在您的构造函数中注入您想要使用它。如果您的服务是另一个模块的一部分,那么您必须导入该模块。一旦您在提供者中获得服务,您就不需要在管道或指令中的提供者中声明。
我想在您使用此服务的每个组件或管道中想要新实例,然后不要将这部分用于ngModule.providers,但是您必须在每个管道或指令的提供程序中声明它。