2017-08-02 5 views
1

サービス内の変数の変更をコンポーネントが購読または通知できるようにしたい。サービスでプロパティが変更されたときは、どのように検出できますか?

Observablesを調べましたが、ストリームを完了する必要があるため、コンポーネントがアクティブな時間全体にわたって変数を変更する必要があるため、これが機能するとは思われません。

誰もがこれに対して良い戦略を知っていますか?

+0

なぜサービス内で変数を変更したいのですか?サービスは通常、サーバーデータの取得、ユーザー入力の検証、またはコンソールへの直接ログに使用されます。優れたコンポーネントはデータバインディングのプロパティとメソッドを提供します。 (Src:https://angular.io/guide/architecture) –

+0

これは、ユーザーがログインしているかどうか、状態が変わったときにすべてのコンポーネントが更新されるためです。 –

+0

私は、ユーザーがログインしているかどうかを取得するコンポーネントを作成することをお勧めします。他のすべてのコンポーネントを更新するこのコンポーネントからサービスを呼び出します。 –

答えて

3

Subjectまたはそのバリエーションを試しましたか?

BehaviorSubject

サービスを使用して実施例:

export class MyService { 
    myVariableSubject = new BehaviorSubject<number>(0); 

    increase() { 
    this.myVariableSubject.next(this.myVariableSubject.value + 1); 
    } 
} 

コンポーネント:

constructor(private myService: MyService) {} 

ngOnInit() { 
    this.myService.myVariableSubject.subscribe((value: number) => console.log(value)); 
} 

警告:これはあなたの問題に最も適したソリューション(あなたは決して状態)ではないかもしれません。

+0

これはまさにそれです。ありがとう –

関連する問題