2015-05-13 5 views

Odpowiedz

27

będzie płytko oglądać właściwości pojedynczego obiektu i powiadomi Cię, jeśli jedna z nich się zmieni.

$watchGroup ogląda jednak grupę indywidualnych wyrażeń zegarka.

Nie są one równoważne funkcjonalnie. $watchGroup może być używany, gdy chcesz oglądać wiele wyrażeń, które powinny odpowiadać na to samo wywołanie zwrotne - mogą to być indywidualne wyrażenia, które są skierowane na różne obiekty. To może być używane do oglądania 'foo', 'foo.bar' i 'baz.qux'. Są to 3 różne obiekty docelowe - foo, foo 's własność bar i baz o wartości qux, ale wszystkie one przekazują tę samą funkcję obsługi.

W przeciwieństwie do tego, $watchCollection będzie tylko płytko oglądać pojedynczy obiekt. Dzięki temu jest to lepsze dla obiektu, który może bardzo zmienić jego właściwości (na przykład - nasz własny $scope). Zgodnie z naszymi przykładami nazwy śmieci, aby osiągnąć to samo, co powyżej, chcesz tylko oglądać foo i baz, ale będziesz powiadamiany o wszelkich zmianach w foo i baz (w przeciwieństwie do samego powiadomienia o zmianach na samej foo, .. foo.bar i baz.qux

+1

napisał mor e dogłębne podsumowanie tego: https://medium.com/@jbmilgrom/watch-watchgroup-watchcollection-and-deep-watching-in-angularjs-6390f23508fe – jbmilgrom

11

Oto przykład tego, gdzie chcesz użyć każdy

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