0

我有一个自定义管道和一个指令,我想分享一些数据。我创建了一个服务,应该处理这个。 我收到以下错误:没有提供管道服务

Error: No provider for 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

不幸的是,我不能这样做,因为我正在尝试构建其他人将要使用的第三方指令。所以我无法访问该指令将要使用的组件。 – zolipapa

+0

在这种情况下,您需要将提供程序添加到MyModule.forRoot中的模块定义中。 –

0

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

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

+0

然后我注入我的服务的每个指令都会有相同的服务实例。我希望实现的是为我的模板中放置的每个指令实例提供不同的服务实例。 – zolipapa

相关问题