没有管道服务提供商

时间:2017-04-25 12:59:06

标签: angular dependency-injection angular2-services angular2-directives angular2-di

我有一个自定义管道和一个指令,我想在它们之间共享一些数据。我创建了一个应该处理它的服务。 我收到以下错误:

  

错误:没有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

2 个答案:

答案 0 :(得分:0)

尝试将providers数组添加到具有此管道指令的组件中。我认为它应该有用。

答案 1 :(得分:0)

您可以在ngModule.providers中声明您的服务,稍后只需要在您的构造函数中注入您想要使用它。如果您的服务是另一个模块的一部分,那么您必须导入该模块。一旦您在提供者中获得服务,您就不需要在管道或指令中的提供者中声明。

我想在您使用此服务的每个组件或管道中想要新实例,然后不要将这部分用于ngModule.providers,但是您必须在每个管道或指令的提供程序中声明它。