2

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

错误:没有 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:使用 angular 2.x 和 Ionic2

4

2 回答 2

0

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

如果您希望在使用此服务的每个组件或管道中都有新实例,那么不要将这部分作为 ngModule.providers 的一部分,但是您必须在每个管道或指令的提供者中声明它。

于 2017-04-25T13:48:17.090 回答
0

尝试将提供者数组添加到具有此指令和管道的组件中。我认为它应该工作。

于 2017-04-25T13:43:01.583 回答