从普通对象创建一个observable

时间:2017-03-23 21:52:34

标签: angular rxjs

我对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; 
    });
  }
}

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

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

谢谢。

1 个答案:

答案 0 :(得分:3)

使用@Input或只是跟踪服务或同一组件的更改时,您可以使用BehaviorSubject

import { BehaviorSubject } from 'rxjs/BehaviorSubject';

appModel = new BehaviorSubject(new ApplicationModel());

推送新的更改:

appModel.next(applicationModelModified);

订阅新的更改:

appModel.subscribe(val => ...)

随时读取值:

appModel.value