AngularJs Individual手表vs watchCollection

时间:2016-03-11 08:17:06

标签: angularjs

我正在尝试优化我已制作的应用的某些部分,我想知道观看一组参数的最有效方法是什么:

说我们有以下对象:

vm.search = {
  query : '',
  item1: ''
};

这样做最有效:

$ watch()x2

$scope.$watch('vm.search.query', function(newv, oldv) {
    // process value        
});
$scope.$watch('vm.search.item', function (newv, oldv) {
    // process value
});

优点:

  • 仅在更改时检查值
  • 只需要处理更改后的值

缺点:

  • 如果有很多值
  • ,需要很多观察者

$ watch(,true)

$scope.$watch('vm.search', function (newVal, oldVal) {
    if (!angular.equals(newVal.query, oldVal.query)) {
        // process value
    }
    if (!angular.equals(newVal.item, oldVal.item)) {
        // process value
    }
}, true);

优点:

  • 所有值的观察者
  • 当一次多次更改时,只有一个观察者被称为

缺点:

  • 检查在这种情况下可能不需要的参考
  • 需要手动检查哪个值已更改

$ watchCollection()

$scope.$watchCollection('vm.search', function (newVal, oldVal) {
    if (!angular.equals(newVal.query, oldVal.query)) {
        // process value
    }
    if (!angular.equals(newVal.item, oldVal.item)) {
        // process value
    }
});

优点:

  • 所有值的观察者
  • 当一次多次更改时,只有一个观察者被称为

缺点:

  • 不检查参考
  • 需要手动检查哪个值已更改

1 个答案:

答案 0 :(得分:2)

如果您需要为不同目的观看它们,请在不同的$ watch中观看。如果没有,你可以使用$ watchCollection。

否则,如果你想检查5个属性,你将有一个很长的功能做5个不同的事情(至少!)。最好保持他们有一个单一的责任。

除非你做了一个非常巨大的(太大了?)页面,否则有更多$ watch是没有的。