2016-04-06 11 views
0

私は最近angular2 data binding between service and component propertiesを投稿し、Thierryは面白いことを指摘しました。angular2データバインディングを使用して、参照データ型を使用して

サービス(シングルトン)に格納されている配列やオブジェクトのような参照データ型を持ち、それを指し示すさまざまなコンポーネントの参照を作成すると、オブジェクトがどこからでも更新されると、作品!)。

私の場合、スレッドオブジェクトをさまざまなコンポーネントで同時に表示(プレビュー、メインビュー、ダッシュボードなど)する必要がある小さなフォーラムを構築しています。テキストフィールドを更新/編集するには、これは本当に便利かもしれません。

これは保存すればいいですか?

+0

あなたのテキストフィールドの値はまた、したがって、参照に保存されている(オブジェクトに格納されている場合タイプ)を使用しても安全です。プリミティブ型を使用する場合は、Thierryの答えを参照してください。料理本には件名を使用した例もあります:https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#bidirectional-service –

答えて

1

フィールドが変更されたときに通知を受けるコンポーネントを購読するオブザーバブルを活用する必要があります。そのような

何か:

export class Service { 
    name = "Luke"; 
    nameUpdated = new Subject(); 

    getName() { 
    return this.name; 
    } 

    updateName() { 
    this.name = 'Luke1'; 
    this.nameUpdated.next(this.name); 
    } 
} 

とコンポーネントで:

this.name = this._service.name; 
this._service.nameUpdated.subscribe(name => { 
    this.name = name; 
}); 

このplunkrを参照してください:https://plnkr.co/edit/CRE92tdCsteoS2MVeGfh?p=preview

+0

あなたが今追加したものは、ビューはサービス権利のプリミティブデータ型の変更について更新されましたか? (私は新しいSubjectが観測可能だと思いますか?)いずれにしても助けてくれてありがとう! –

+0

実際、コンポーネントはサービス内の更新を通知され、ビューがそれに応じてバインドされるプロパティを更新できます。はい、対象クラスはObservableとObserverの両方を継承します...あなたは大歓迎です! –

+0

私はobservablesについてもっと知る必要がありますが、これまでほとんどの場合、rxJSとHTTPに関する情報があります。どこから始めるべきですか? –