2016-03-31 12 views
1

コンポーネントは、入力に基づいてサービス(または提供可能なもの)を提供できますか?私の場合、私のコンポーネントは別のfirebaseサービスをベースとしたサービスを使用しています。コンポーネントに子供が新しいfirebaseサービスを提供したいので、もう一方のサービスはdb内の子パーツだけにアクセスします。角2コンポーネント変数の提供

私の現在のソリューションでは、私のコンポーネントはサービスのsetChild関数を呼び出して子を設定しますが、上記の方法で可能であるかどうか不思議です。

おかげで、 タマス

答えて

2

いいえ、それは不可能です。デコレータ引数が評価されると、コンポーネントのインスタンスはまだ存在しません。

あなたができることは、プロバイダに追加されたコンポーネントにサービスを注入し、その値をサービスに渡すことです。変更がDelegation: EventEmitter or Observable in Angular2

+1

おかげであなたの答えのために多くを見るについて通知するObservableを使用して共有サービスの作成の詳細については

@Injectable() class MyService { ... } @Component({ selector: 'parent', template: 'x' providers: [MyService], )} class Parent { @Input() someInput; constructor(private myService:MyService) { } ngOnChanges() { this.myService.sharedValue = this.someInput; } } @Component({ selector: 'descendant', template: 'x' )} class Descendant { constructor(myService:MyService) { myService.sharedValueChange.subscribe(val => { console.log(val); }); } } 

:子も同じサービスを注入すると、彼らは同じ値を共有しています。私はこのようにします。 – bucicimaci