2

私はdata変数と単純なサービスがあります。サービス内での単純な変数の変更に関するディレクティブからの監視方法は?

this.myService.data = 12345; 

私はそれをやろうとしました:私は誰かが私の変数に設定をしている時はいつでもキャッチしたいディレクティブから今

import { Injectable } from '@angular/core'; 

@Injectable() 
export class MyService { 

    private _data:number; 

    get data(): number { 
    return this._data; 
    } 
    set data(value: number) { 
    this._data = value; 
    } 

} 

を申し訳ありませんが、構文に何かがありません:

this.myService.data.subscribe(res => console.log(res)); 

私は何が欠けていますか?私は観察を宣言する必要がありますか?なぜ、どこ? これはHTTPリクエストではないので、この問題を正しく認識できるかどうかはわかりませんが、変更は簡単です。

答えて

3

あなたはこのようにこれを達成することができます、あなたのサービスで

を持つEventEmitter置く:あなたのデータを設定すると次に

dataUpdated : EventEmitter<number> = new EventEmitter(); 

を、setDataメソッドの最後に追加します。

this.dataUpdated.emit(this.data); 

これは、変数が変更されたことをサブスクライブしたコンポーネントに通知し、新しい値を送信することを許可します(あなたは何でも自由に送信できます)。

そして最後にあなたの中にコンポーネントあなたはこのように通知することができます。

constructor 
(
    private service: Service 
) 

ngOnInit() 
{ 
    this.service.dataUpdated.subscribe 
    (
     (data: number) => 
     { 
      //setData used, you can use new data if needed 
     } 
    ); 
} 
+1

はありがとうございました。これは簡単なソリューションですもう一度ありがとう – AngularOne

+0

それがあなたを助けてくれてうれしいです。 :) – Powkachu

+0

BTW- 3回変更された理由はありますか? – AngularOne

関連する問題