$ watchGroup vs $ watchCollection?

时间:2015-05-13 16:50:45

标签: javascript angularjs angularjs-scope

Angular中有2 ways to watch a group of variables。但它们之间的区别是什么?

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

2 个答案:

答案 0 :(得分:30)

SELECT permits.zipCode,SUM( payments.payment) FROM permits INNER JOIN Payments ON payments.permitID = permits.permitID GROUP BY permits.zipCode 会浅看单个对象上的属性,并在其中一个更改时通知您。

然而,

$watchCollection会观看一组个人表情。

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

相比之下,qux只会浅看单个对象。这使得对象可能会更好地改变它的属性(例如 - 我们自己的$watchCollection)。为了与我们的垃圾名称示例保持一致,要实现与上述相同的操作,您只需要观看$scopefoo,但会在baz和{{1}中通知您。 (而不是仅仅通知foo本身,bazfoo的更改。

答案 1 :(得分:11)

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

$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';