2015-05-13 23 views
15

अंगुलर में 2 ways to watch a group of variables हैं। लेकिन उनके बीच क्या अंतर है?

वे दोनों उथले घड़ियों लगते हैं। क्या ऐसी स्थितियां हैं जहां एक दूसरे पर स्पष्ट रूप से बेहतर है?

उत्तर

27

$watchCollection उथले एकल ऑब्जेक्ट पर गुणों को देखेंगे और उनमें से कोई एक बदलता है तो आपको सूचित करेगा।

$watchGroup हालांकि व्यक्तिगत घड़ी अभिव्यक्तियों का एक समूह देखता है।

वे कार्यात्मक रूप से समकक्ष नहीं हैं। $watchGroup का उपयोग तब किया जा सकता है जब आप अभिव्यक्तियों की एक बड़ी संख्या देखना चाहते हैं जो सभी को उसी कॉलबैक का जवाब देना चाहिए - ये व्यक्तिगत अभिव्यक्तियां हो सकती हैं जो विभिन्न वस्तुओं को लक्षित करती हैं। इसका उपयोग 'foo', 'foo.bar', और 'baz.qux' देखने के लिए किया जा सकता है। ये 3 अलग-अलग लक्ष्य हैं - foo, foo की bar संपत्ति और baz की qux संपत्ति, लेकिन वे सभी एक ही हैंडलर को सौंपेंगे।

इसके विपरीत, $watchCollection केवल एक ही वस्तु को उथलाएगा। यह किसी ऑब्जेक्ट के लिए बेहतर बनाता है जो इसकी गुणों को बहुत बदल सकता है (उदाहरण के लिए - हमारा अपना $scope)। हमारे कचरे के नाम उदाहरणों को ध्यान में रखते हुए, उपर्युक्त के रूप में प्राप्त करने के लिए आप केवल foo और baz देखना चाहते हैं, लेकिन आपको foo और baz में किसी भी बदलाव की अधिसूचना दी जाएगी (जैसा कि केवल foo पर परिवर्तनों के लिए अधिसूचित किया जा रहा है, ।। foo.bar और baz.qux

+1

एक मोर ने लिखा है ई के गहराई से सारांश में: https://medium.com/@jbmilgrom/watch-watchgroup-watchcollection-and-deep-watching-in-angularjs-6390f23508fe – jbmilgrom

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'; 
संबंधित मुद्दे