0

私はカスタムパイプとディレクティブを持っています。私はサービスを作成しました。これはこれを処理する必要があります。 私は次のエラーを取得する:パイプでサービスするプロバイダがありません

@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) {} 
} 

使用する場合、パイプは、同様のサービスを取得する必要が

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

答えて

0

と角度2.xのを使用するには、パイプと、このディレクティブを持つコンポーネントへのプロバイダの配列を追加してください。私はそれがうまくいくと思う。

+0

残念ながら、他の人が使用する第三者指令を作成しようとしているため、残念ながらそれはできません。したがって、私はこのディレクティブが使用されるコンポーネントにアクセスすることはできません。 – zolipapa

+0

この場合、MyModule.forRootのモジュール定義にプロバイダを追加する必要があります。 –

0

ngModule.providersでサービスを宣言し、後でそれを使用したいコンストラクタに注入することができます。サービスが別のモジュールの一部である場合、そのモジュールをインポートする必要があります。プロバイダにサービスを提供した後は、パイプやディレクティブのプロバイダで宣言する必要はありません。

Idこのサービスを使用するすべてのコンポーネントまたはパイプで新しいインスタンスを作成したい場合は、ngModule.providersのこの部分を作成せずに、すべてのパイプまたはディレクティブのプロバイダで宣言する必要があります。

+0

私は私のサービスを注入するすべての指令は、同じサービスインスタンスを持っています。私が達成したいのは、私がテンプレートに置くすべてのディレクティブインスタンスに対してサービスの異なるインスタンスを持つことです。 – zolipapa

関連する問題