如果我这样做:
scope.$watch('obj', function(newObj, oldObj) {
//...
}, true);
如何在对象中找到已更改的键值对?
.
只是为了理解我试图做什么:
我有一个形式的对象:
scope.actions = {
action1: false,
action2: false
}
当布尔值发生变化时,我想为其分配函数调用。比如,执行操作 - 撤消操作。
所以我是这样看的:
scope.$watch('actions', function(newObj, oldObj) {
/*PSEUDO CODE START*/
IF (action1 changed && action1 true) {
do-func1();
}
IF (action1 changed && action1 false) {
undo-func1();
}
...
/*PSEUDO CODE END*/
}, true);
我的问题是,如果我检查其布尔值,所有函数都会被调用。所以这里的重点是,如何在对象中找到更改的键值对?
scope.$watch('actions', function(newActions, oldActions) {
for(var i in newActions) {
if(newActions.hasOwnProperty(i)) {
var newAction = newActions[i];
var oldAction = oldActions[i];
if(newAction !== oldAction) {
if(newAction === true) {
doActions[i](); // do-func-i();
} else if (newAction === false) {
undoActions[i](); // undo-func-i();
}
}
}
}
}, true);
doActions
这是传统的行动地图
doActions = {
action1 : function() {
console.log('action1');
},
action2 : function() {
console.log('action2');
}
}
doActions['action1']
将引用第一个函数
您可能也有一个数组,但是您需要引入一个索引来获取正确的函数doActions[0]