OBChanges的rxjs已过时

时间:2016-03-15 01:58:54

标签: rxjs

由于 ofObjectChanges 是基于 Object.observe()构建的,这是过时的(https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/observe)我正在寻找观察对象属性的替代方法变化。有人知道吗?

1 个答案:

答案 0 :(得分:3)

也许使用代理是一种选择,尽管需要替换原始对象

const { Subject } = require('rxjs');

// Take an object, and return a proxy with an 'observation$' stream
const toObservableObject = targetObject => {
    const observation$ = new Subject();
    return new Proxy(targetObject, {
        set: (target, name, value) => {
            const oldValue = target[name];
            const newValue = value;
            target[name] = value;
            observation$.next({ name, oldValue, newValue });
        },

        get: (target, name) => name == 'observation$' ? observation$ : target[name]
    });
}

const observableObject = toObservableObject({ });

observableObject.observation$
    .filter(modification => modification.name == 'something')
    .subscribe(({ name, oldValue, newValue }) => console.log(`${name} changed from ${oldValue} to ${newValue}`));

observableObject.something = 1;
observableObject.something = 2;

输出

something changed from undefined to 1
something changed from 1 to 2

在兼容性表中查找代理当前节点版本有完全支持) https://kangax.github.io/compat-table/es6/

代理的文档 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Proxy