2016-07-09 15 views
5

最近Angular 1からAngular 2に移動し、オブジェクトのプロパティの変更を検出しようとする問題が発生しました。オブジェクトのプロパティの変更を角度2で観測する

典型的なユースケースは、I設定を含むオブジェクト、例えば、データの一部を保持する注射サービスを持っているということである。

@Injectable() 
export class SettingsService 
{ 
    _settings = { 
     'settingA' : true, 
     'settingB' : false 
    } 

    ... 

    get settings() 
    { 
     return this._settings; 
    } 
} 

Iは次いで、設定ページなどの成分を有することになります設定サービスから設定を取得します。イオンアプリ:

constructor(private settingsService : SettingsService) 
{ 
    this.settings = settingsService.settings; 
} 

そしてtoggleのようなUIコンポーネントへのオブジェクトのプロパティに直接カップル。問題は、すべてのトグル変更イベントで関数を呼び出すこと以外の点です。サービスまたはコンポーネントのいずれかが、設定オブジェクトがデータストアに設定を保存するような適切なアクションをトリガするように変更されたことをどのように知ることができますか?

答えて

6

観測可能なデータサービスを構築するには、BehaviorSubjectからrxjsまでを使用できます。あなたはあなたのサービスでサブジェクトを作成し、コンポーネントでこのサブジェクトをサブスクライブする必要があります。

ここでサービスを作成するためのチュートリアルをご覧ください:example 1example 2

あなたは理論的にはEventEmitterサービスを利用する機会があります。しかし、あなたはそれを使うべきではありません。詳細はanswerをご覧ください。この回答では、BehaviorSubjectの代わりにObservableを使用して解決する方法の例も見つかります。

+0

Toggleがサービスの変更を取得できるのではなく状態を変更する場合でもBehaviorSubjectを使用する必要があります。 EventEmitterを使用する際の注意点として、他の場所で使用して、サービス内のデータ更新コンポーネントに通知しています。 – cubiclewar

関連する問題