2017-03-23 5 views
3

私はRxJSの新機能を使用していますので、事前にお答えください。プレーンオブジェクトからオブザーバブルを作成する

私はAngular 2のアプリケーションを持っていて、コンポーネントの1つにプレーンオブジェクトがあります。私はこのオブジェクトにUIを束縛しています。私がしたいのは、コードから来たものであろうとユーザーがフィールドの1つを変更したものであろうと、このオブジェクトに対するすべての変更を取得できることです。

私は観察可能なオブジェクトを見ていましたが、新しいメソッドがEmitメソッドによってプッシュされた場合にのみ、通知を受け取ることができます。たとえば、入力フィールドにバインドされたプロパティの場合、これはどのように機能しますか?

これを行うには良い方法がありますか?

myViewModel.personName.subscribe(function(newValue) { 
 
    alert("The person's new name is " + newValue); 
 
});
:私はノックアウトは、あなたが変更通知を受け取ることができます方法に似たものを探しています

export class MyComponent { 
 
    app: ApplicationModel = new ApplicationModel(); <--- this is the object I want to track 
 
    
 
    constructor(api: APIService) { 
 
    api.getApplication().then((data) => { 
 
     this.app = data; 
 
    }); 
 
    } 
 
}

:ここ

は次のように私のコードが見えるものです

ありがとうございます。

+0

可能な重複[どのように検出するために、 @Input()値がAngular2で変化する](http:// stackoverflow。 com/questions/38571812 /入力時の値変更時の検出方法2) – estus

+0

私はそうは思わない。私の場合、オブジェクトはコンポーネント自体で作成され、@Input経由でインポートされません。 – dpdragnev

+0

これはできないため、間違った方法をとっています。そのため、Angularはオブザーバブルを利用しており、これらすべてのインプットを持っています。 – estus

答えて

1

@Inputを使用する場合や、サービスまたは同じコンポーネントの変更を追跡する場合はBehaviorSubjectを使用できます。

import { BehaviorSubject } from 'rxjs/BehaviorSubject'; 

appModel = new BehaviorSubject(new ApplicationModel()); 

プッシュ新しい変更:

appModel.next(applicationModelModified); 

新しい変更登録:

appModel.subscribe(val => ...) 
は、任意の時点で

読む価値:とき

appModel.value 
+0

ありがとう@zurfyx。これは、UI要素(入力など)にバインドされたプロパティではどのように機能しますか?手動で次のメソッドを呼び出さなければならないのですか? – dpdragnev

+0

@dpdragnev 'BehaviorSubject'がどのように動作するのか、そうです。より直接的な選択肢があるかどうかはわかりません。ただし、フォームのような要素のグループについては、グループのいずれかに影響を与える変更(つまり、this.myForm.valueChanges.subscribe)を聞き、変更した後に変更をプッシュすることができます。 – zurfyx

関連する問題