Rxjs观察对象更新和更改

And*_*ata 12 javascript frp rxjs

我目前正在尝试观察给定对象的任何更改,包括它的所有元素.

以下代码仅在对象[x]更新时触发,但如果单独更新对象[x]的元素(如object [x] [y])则不会触发

<script>
  var elem = document.getElementById("test1");

var log = function(x) {
    elem.innerHTML += x + "<br/><br/><br/>";
};

var a = [{a:1,b:2},
         {a:2,b:5}
       ];


var source = Rx.Observable
.ofObjectChanges(a)
.map(function(x) {
    return JSON.stringify(x);
});


var subscription = source.subscribe(
    function (x) {log(x);},
    function (err) {log(err);},
    function () {log('Completed');}
);

a[0] = a[1];
</script>
Run Code Online (Sandbox Code Playgroud)

此代码运行并正确触发.

然而.如果我改为这个

a[0]['a'] = 3;
Run Code Online (Sandbox Code Playgroud)

然后什么都没发生

编辑

一个更好的方法来表达这一点,我如何观察一组对象的变化?

ele*_*ead 6

如果只想更改嵌套对象:

var source = rx.Observable.from(a).flatMap(function(item) {
  return rx.Observable.ofObjectChanges(item);
});
Run Code Online (Sandbox Code Playgroud)

如果你还想要改变a[0] = a[1]:

var source = rx.Observable.merge(
  rx.Observable.ofArrayChanges(a),
  rx.Observable.from(a).flatMap(function(item) {
    return rx.Observable.ofObjectChanges(item);
  })
);
Run Code Online (Sandbox Code Playgroud)

flatMapselectMany(它们是相同的功能)将允许你遍历一个值,执行返回可观察到的一个功能.来自所有这些Observable的值被"展平"到返回的新流上.

http://reactivex.io/documentation/operators/flatmap.html

  • 'rx.Observable.ofObjectChanges'被摧毁. (13认同)
  • 是的,看到这种方法折旧了,我真的很想看看如何观察RxJS 5中的对象变化...... (4认同)