在对象范围内找到更新的字段。$ watch - angularjs

时间:2015-06-19 13:50:12

标签: angularjs

如果我这样做:

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);

我的问题是,如果我检查其布尔值,则会调用所有函数。所以这里的重点是,如何在对象中找到更改的键值对?

1 个答案:

答案 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]