オブジェクトを観測するES6の方法は、Proxiesです。元のオブジェクトをラップし、そのオブジェクトを処理するプロキシを作成します。これを使ってObservable.ofObjectChanges
のようなものを作成することができます。ここでは部分的な実装(のみset
あなたが他のtrapsを実装する必要があると思います。):
Observable.ofProxyChanges = (target) => {
let subject = new Subject
let proxy = new Proxy(target, {
set(target, key, val) {
let oldValue = target[key]
target[key] = val
subject.next({
type: oldValue === undefined ? "add" : "change",
object: target,
name: key,
oldValue: oldValue
})
}
})
return [proxy, subject.asObservable()]
}
let [obj, objChange$] = Observable.ofProxyChanges({})
objChange$.subscribe(console.log)
obj.bar = 1 // logs { type: "add", name: "bar", object: { bar: 1 } }
obj.foo = 2 // logs { type: "add", name: "foo", object: { bar: 1, foo: 2 } }
obj.foo = 3 // logs { type: "change", name: "foo", object: { bar: 1, foo: 3 }, oldValue: 2 }
私はこの質問 – Marin
に受け入れ答えに興味はまだ試していないが、私は@Skeptor答えを信じて私の場合に役立つでしょう。 –