使用RxJS跟踪对象中的更改?

时间:2017-04-24 21:30:36

标签: angular rxjs

有没有办法使用RxJS跟踪特定对象的变化?基于我的研究,曾经有一个名为Observable.ofObjectChanges()的方法来创建一个跟踪对象变化的observable,但看起来已经弃用了。

我已经尝试过使用Object.from和Object.of,但是当特定对象更新时似乎都没有触发。

任何见解都表示赞赏!

2 个答案:

答案 0 :(得分:1)

您可以为要监视的属性添加自定义setter,通知RxJS BehaviorSubject,然后您订阅该主题以侦听更改。

这样的事情:

import {BehaviorSubject} from 'rxjs/BehaviorSubject';

class MyClass
{
   changesSubject : BehaviorSubject<any> = new BehaviorSubject();

   _myprop : any;

   public set myprop(val : any) {
       this.changesSubject.next(val);
       this._myprop = val;
   }
}

let myobj = new MyClass();
myobj.changesSubject.subscribe((val) => console.log(val));
myobj.myprop = "this should trigger a change detection";

答案 1 :(得分:1)

使用Observable包裹BehaviourSubject并收听Observable。

private _aStringArry: BehaviorSubject<string[]> = new BehaviorSubject(null);

public aStringArray: Observable<string[]> = this._aStringArry.asObservable();

setStringArray(stringArray: string[]): void {
    this._aStringArry.next(stringArray);
}

订阅aStringArray进行更改。我建议这样做,因为在某些情况下,除非包含在Observable中,否则BehaviorSubjects会抛出Promise拒绝。