如果我这样做:
scope.$watch('obj', function(newObj, oldObj) {
//...
}, true);
如何在对象中找到更改的键值对?
只是为了理解我尝试做的事情:
我有一个形式的对象:
scope.actions = {
action1: false,
action2: false
}
当布尔值改变时,我想为它分配函数调用。像DO-action - UNDO-action。
所以我按照以下方式观察:
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);
我的问题是,如果我检查其布尔值,则会调用所有函数。所以这里的重点是,如何在对象中找到更改的键值对?
答案 0 :(得分:1)
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]