$ watchGroup vs $watchCollection?

Есть 2 способа просмотра группы переменных в Angular. Но какая разница между ними?

Они оба, похоже, делают мелкие часы. Существуют ли ситуации, когда, очевидно, предпочтительнее другого?

Ответы

Ответ 1

$watchCollection будет наблюдать за свойствами одного объекта и уведомлять вас об изменении одного из них.

$watchGroup однако наблюдает за группой отдельных выражений часов.

Они не являются функционально эквивалентными. $watchGroup может использоваться, когда вы хотите посмотреть множество выражений, которые должны реагировать на один и тот же обратный вызов - это могут быть отдельные выражения, предназначенные для разных объектов. Это можно использовать для просмотра 'foo', 'foo.bar' и 'baz.qux'. Это три разные цели: foo, foo bar и свойство baz qux, но все они делегируются одному и тому же обработчику.

В отличие от этого $watchCollection будет отображаться только один объект. Это делает его лучше для объекта, который может сильно изменить его свойства (например, наш собственный $scope). В соответствии с примерами названия мусора, чтобы достичь того же, что и выше, вы хотели бы смотреть только foo и baz, но вы будете уведомлены о любых изменениях в foo и baz (в отличие от просто уведомление об изменениях на foo, foo.bar и baz.qux.

Ответ 2

Вот пример того, где вы будете использовать каждый.

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