यह सवाल पहले ही मौत के घाट उतार दिया गया है, लेकिन मैं इसे किसी और मामले में साझा करूंगा जब तक कोई और उस भयानक गड़बड़झाले से नहीं जूझता जो अंगुलियृज स्कूप है। इस इच्छा को कवर =
, <
, @
, &
और ::
। पूरा लेखन यहाँ पाया जा सकता है ।
=
एक दो तरह से बंधन स्थापित करता है। माता-पिता में संपत्ति बदलने से बच्चे में परिवर्तन होगा, और इसके विपरीत।
<
एक तरह से बाध्यकारी, बच्चे को माता-पिता स्थापित करता है। माता-पिता में संपत्ति बदलने से बच्चे में बदलाव आएगा, लेकिन बाल संपत्ति को बदलने से मूल संपत्ति प्रभावित नहीं होगी।
@
बाल गुण टैग विशेषता के स्ट्रिंग मान को निर्दिष्ट करेगा। यदि विशेषता में एक अभिव्यक्ति है , तो बाल संपत्ति अद्यतन करती है जब भी अभिव्यक्ति एक अलग स्ट्रिंग का मूल्यांकन करती है। उदाहरण के लिए:
<child-component description="The movie title is {{$ctrl.movie.title}}" />
bindings: {
description: '@',
}
यहां, description
बच्चे के दायरे में संपत्ति अभिव्यक्ति का वर्तमान मूल्य होगा "The movie title is {{$ctrl.movie.title}}"
, जहां movie
माता-पिता के दायरे में एक वस्तु है।
&
थोड़ा मुश्किल है, और वास्तव में इसका उपयोग करने के लिए कोई बाध्यकारी कारण नहीं लगता है। यह आपको पैरेंट स्कोप में एक अभिव्यक्ति का मूल्यांकन करने की अनुमति देता है, जो चाइल्ड स्कोप से वैरिएबल के साथ मापदंडों को प्रतिस्थापित करता है। एक उदाहरण ( प्लंक ):
<child-component
foo = "myVar + $ctrl.parentVar + myOtherVar"
</child-component>
angular.module('heroApp').component('childComponent', {
template: "<div>{{ $ctrl.parentFoo({myVar:5, myOtherVar:'xyz'}) }}</div>",
bindings: {
parentFoo: '&foo'
}
});
यह देखते हुए parentVar=10
, अभिव्यक्ति parentFoo({myVar:5, myOtherVar:'xyz'})
का मूल्यांकन होगा 5 + 10 + 'xyz'
और घटक इस प्रकार प्रस्तुत करेगा:
<div>15xyz</div>
आप कब इस जटिल कार्यक्षमता का उपयोग करना चाहेंगे? &
अक्सर लोगों द्वारा माता-पिता के दायरे में कॉलबैक फ़ंक्शन को पास करने के लिए लोगों द्वारा उपयोग किया जाता है। वास्तव में, हालांकि, फ़ंक्शन को पारित करने के लिए '<' का उपयोग करके वही प्रभाव प्राप्त किया जा सकता है, जो अधिक सीधा है और मापदंडों ( {myVar:5, myOtherVar:'xyz'}
) को पारित करने के लिए अजीब घुंघराले ब्रेस सिंटैक्स से बचा जाता है । विचार करें:
कॉलबैक का उपयोग कर &
:
<child-component parent-foo="$ctrl.foo(bar)"/>
angular.module('heroApp').component('childComponent', {
template: '<button ng-click="$ctrl.parentFoo({bar:'xyz'})">Call foo in parent</button>',
bindings: {
parentFoo: '&'
}
});
कॉलबैक का उपयोग कर <
:
<child-component parent-foo="$ctrl.foo"/>
angular.module('heroApp').component('childComponent', {
template: '<button ng-click="$ctrl.parentFoo('xyz')">Call foo in parent</button>',
bindings: {
parentFoo: '<'
}
});
ध्यान दें कि वस्तुओं (और सरणियों) को बाल दायरे के संदर्भ में पारित किया जाता है, कॉपी नहीं किया जाता है। इसका मतलब यह है कि भले ही यह एकतरफा बाध्यकारी हो, आप माता-पिता और बच्चे दोनों के दायरे में एक ही वस्तु के साथ काम कर रहे हैं।
कार्रवाई में विभिन्न उपसर्गों को देखने के लिए, इस प्लंक को खोलें ।
एक बार के बंधन (प्रारंभिक) का उपयोग करना
::
[आधिकारिक डॉक्स]
AngularJS के बाद के संस्करणों में एक बार की बाध्यता के विकल्प का परिचय दिया गया है, जहां केवल एक बार ही चाइल्ड स्कोप प्रॉपर्टी को अपडेट किया जाता है। यह मूल संपत्ति को देखने की आवश्यकता को समाप्त करके प्रदर्शन में सुधार करता है। वाक्य रचना ऊपर से अलग है; एक बार के बंधन को घोषित करने के लिए, आप घटक टैग::
में अभिव्यक्ति के सामने जोड़ते हैं :
<child-component
tagline = "::$ctrl.tagline">
</child-component>
यह tagline
एक-तरफ़ा या टू-वे बाइंडिंग की स्थापना के बिना चाइल्ड स्कोप के मान का प्रचार करेगा । ध्यान दें : यदि tagline
शुरू undefined
में मूल दायरे में है, तो कोणीय इसे तब तक देखेगा जब तक यह बदल नहीं जाता है और फिर बच्चे के दायरे में संबंधित संपत्ति का एक बार का अद्यतन करें।
सारांश
नीचे दी गई तालिका से पता चलता है कि संपत्ति, वस्तु, सरणी, स्ट्रिंग आदि के आधार पर उपसर्ग कैसे काम करते हैं।