题 $ watchGroup vs $ watchCollection?


有很 2种观察一组变量的方法 在Angular。但它们之间的区别是什么?

他们似乎都做浅表。是否存在一个明显优于另一个的情况?


15
2018-05-13 16:50


起源




答案:


$watchCollection 将浅看上一个属性 单个对象 如果其中一个发生变化,请通知您。

$watchGroup 然而,观看一组个人手表表达。

它们在功能上并不相同。 $watchGroup 当您想要观看应该响应同一回调的多个表达式时,可以使用这些表达式 - 这些表达式可以是针对不同对象的单个表达式。这可以用来观看 'foo''foo.bar',和 'baz.qux'。这些是3个不同的目标 - foofoobar 财产和 bazqux 属性,但它们都将委托给同一个处理程序。

相比之下, $watchCollection 只会浅看单个物体。这使得对象可能会更好地改变它的属性(例如 - 我们自己的属性) $scope)。与我们的垃圾名称示例一致,为了达到与上述相同的目的,您只想观看 foo 和 baz,但是你会收到任何变化的通知 foo 和 baz (而不是仅仅被告知变化 foo 本身, foo.bar 和 baz.qux


28
2018-05-13 16:55



写了一篇更深入的总结: medium.com/@jbmilgrom/... - jbmilgrom


以下是您使用每一个的示例。

$scope.data = ['Abc', 'Bcd', 'Cde', 'Def'];
$scope.$watchCollection('data', function(){...});
// responds to changes within $scope.data
// The following line will trigger the watch function:
$scope.data[0] = 'FOO';

-

$scope.data = ['Abc', 'Bcd', 'Cde', 'Def'];
$scope.$watchGroup('data', function(){...});
// responds to changes on the properties (or functions, etc.)
// Any angular expression can be used in $scope.data
// The following line will trigger the watch function:
$scope.Abc = 'FOO';

11
2018-05-13 17:01