从普通对象创建可观察对象

dpd*_*nev 3 rxjs angular

我对 RxJS 很陌生,所以如果已经回答了这个问题,我提前道歉。

我有一个 Angular 2 应用程序,在其中一个组件中我有一个普通对象。我正在将 UI 绑定到这个对象。我想要做的是能够捕获对该对象的所有更改,无论它们来自代码还是来自更改字段之一的用户。

我正在查看可观察对象,但似乎订阅者只能在通过 Emit 方法推送新对象时接收通知。例如,在属性绑定到输入字段的情况下,这将如何工作?

有没有更好的方法来做到这一点?

这是我的代码的样子:

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; 
    });
  }
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找类似于 Knockout 允许您接收更改通知的方式:

myViewModel.personName.subscribe(function(newValue) {
    alert("The person's new name is " + newValue);
});
Run Code Online (Sandbox Code Playgroud)

谢谢你。

zur*_*fyx 5

无论是在使用@Input或简单地跟踪来自服务甚至相同组件的更改时,您都可以使用BehaviorSubject.

import { BehaviorSubject } from 'rxjs/BehaviorSubject';

appModel = new BehaviorSubject(new ApplicationModel());
Run Code Online (Sandbox Code Playgroud)

推送新变化:

appModel.next(applicationModelModified);
Run Code Online (Sandbox Code Playgroud)

订阅新更改:

appModel.subscribe(val => ...)
Run Code Online (Sandbox Code Playgroud)

在任何时候读取值:

appModel.value
Run Code Online (Sandbox Code Playgroud)