$ watchGroup vs $ watchCollection?

Ata*_*v32 19 javascript angularjs angularjs-scope

在Angular中有两种方法可以观察一组变量.但它们之间的区别是什么?

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

Dan*_*try 30

$watchCollection将浅显示单个对象上的属性,并在其中一个对象发生更改时通知您.

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

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

相比之下,$watchCollection只会浅看单个物体.这使得对象可能会更好地改变它的属性(例如 - 我们自己的$scope).在与我们的垃圾实例名称保持一致,以实现与上面相同,你只会想观看foobaz,但你会被通知的任何改变foobaz(而不是仅仅被通知上的变化foo本身,foo.barbaz.qux.


Han*_*pio 12

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

$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';
Run Code Online (Sandbox Code Playgroud)

-

$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';
Run Code Online (Sandbox Code Playgroud)