我正在尝试使用JavaScript代理来检测对象数组中的更改。
问题:每当数组中的任何更改(例如删除或插入)发生变化时,我都希望将其删除或插入。
当前代码
target = [{ id: 1, a: 'a' }, { id: 2, a: 'b' }];
proxy = new Proxy(target, {
get: function (target, property: string, receiver) {
if (property === 'pop') {
console.log('deleted object', target[target.length - 1]);
}
console.log('get', property);
// property is index in this case
return target[property];
},
set: function (target, property, value, receiver) {
console.log('set', property, 'to', value);
target[property] = value;
// you have to return true to accept the changes
return true;
}
});
当前想法:
我做了一些变通方法来从数组中获取已删除的项目,但它仅适用于pop()
方法,因为它从数组中删除了最后一个项目。但是我需要一种方法来获取更改,即使使用splice
方法或push
或pop
进行更改也是如此。
谢谢。
[更新] 我找到的解决方案:
https://github.com/ElliotNB/observable-slim 我使用此库来检测数组中的更改,我也能够检测到数组内嵌套属性的更改。这正是我想要的。
我使用此库的原因是因为它使用代理。