2

角度依存性注入を使用すると、サービスクラスの代わりにトークンを使用して文字列、関数、またはオブジェクトを注入できます。依存性注入トークン値を更新する方法

私はこのように私のモジュールでそれを宣言します。しかし、どのように私はコンポーネントから値を更新し、他のコンポーネントを取得してみましょうことができます

constructor(@Inject(MyValueToken) my_value: string) { 
    this.title = my_value; 
} 

providers: [{ provide: MyValueToken, useValue: 'my title value'}] 

と私はこのようにそれを使用毎回新しい価値?言い換えれば、私はBehaviorSubjectのようなものを使って値を出したり受け取ったりする機能をシミュレートしたいと思っています。

これらの注入トークン値が静的データのみを提供する場合は、これを使用するのではなく、単にコンポーネント内の静的値を宣言して直接使用することができます。代わりにあなたがアクセスして更新し、それを一つの成分で、その他に加入し、その後、BehaviorSubjectを使用することができ、不変であるプリミティブの

+1

はい、あなたはその静的な値を宣言することができ、そしてそれはだ場合あなたが*する必要がある1つの場所でのみ使用されます*。 DIは、複数の場所で使用され、一貫性が必要な場合や、テストのために代替値を注入する場合に便利です。いずれにも当てはまらない場合は、複雑性を追加しないでください。可能であれば、そうする必要はありません。 https://angular.io/guide/dependency-injection-in-actionを読むことをお勧めします。 – jonrsharpe

+0

@jonsharpe偉大な答えはちょうどポイント!ありがとうございます:) –

答えて

2

providers: [{ provide: MyValueToken, useValue: new BehaviorSubject('')}] 

// consumer 
constructor(@Inject(MyValueToken) my_value: BehaviorSubject) { 
    my_value.subscribe((my_value)=>this.title = my_value); 
} 

// producer 
constructor(@Inject(MyValueToken) my_value: BehaviorSubject) { 
    my_value.next('my title value'); 
} 
+0

これは、サービスクラスを宣言し、それとBehaviorSubjectを使用することとはどのように違いますか?私はこの角度依存性注入トークン値のすべてが何のためにも複雑さを加えるような意味で無用な式であると感じています。これらの注入トークンを大いに活用するのは何ですか? –

+1

@HamedBaatour DIパターンが有益であるのと同じ理由。拡張性とテスト容易性 – estus

+1

@HamedBaatour、[this](http://misko.hevery.com/2008/11/11/clean-code-talks-dependency-injection/) –