Есть 2 способа просмотра группы переменных в Angular. Но какая разница между ними?
Они оба, похоже, делают мелкие часы. Существуют ли ситуации, когда, очевидно, предпочтительнее другого?$ watchGroup vs $watchCollection?
Ответ 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';