$ अवलोकन () गुण वस्तुपर एक विधि है, और इस तरह, इसका उपयोग केवल DOM विशेषता के मूल्य परिवर्तन को देखने / देखने के लिए किया जा सकता है। इसका उपयोग केवल निर्देशों के अंदर किया जाता है। जब आप एक डोम विशेषता को देखने / देखने की आवश्यकता हो, जिसमें इंटरपोलेशन (अर्थात, {{}}}) का उपयोग करने पर $ अवलोकन का उपयोग करें।
जैसे,attr1="Name: {{name}}"
फिर एक निर्देश मेंattrs.$observe('attr1', ...)
:।
(यदि आप कोशिशscope.$watch(attrs.attr1, ...)
करते हैं कि यह {{}} s के कारण काम नहीं करेगा - आपको मिल जाएगाundefined
।) बाकी सब चीजों के लिए $ घड़ी का उपयोग करें।
$ घड़ी () अधिक जटिल है। यह एक "अभिव्यक्ति" का अवलोकन / देख सकता है, जहां अभिव्यक्ति या तो एक फ़ंक्शन या एक स्ट्रिंग हो सकती है। यदि अभिव्यक्ति एक स्ट्रिंग है, तो यहएक फ़ंक्शन में $ parse 'd (यानी, एक कोणीय अभिव्यक्ति के रूप में मूल्यांकन) है। (यह ऐसा फ़ंक्शन है जिसे हर पाचन चक्र कहा जाता है।) स्ट्रिंग अभिव्यक्ति में {{}} का नहीं हो सकता है। $ घड़ी स्कोप ऑब्जेक्टपर एक विधि है, इसलिए इसका उपयोग किया जा सकता है / बुलाया जा सकता है, जहां भी आपके पास गुंजाइश ऑब्जेक्ट तक पहुंच है, इसलिए
- एक नियंत्रक - किसी भी नियंत्रक - एनजी-व्यू, एनजी-नियंत्रक या एक निर्देशक नियंत्रक के माध्यम से बनाया गया
- एक निर्देशन में एक लिंकिंग फ़ंक्शन, क्योंकि इसमें एक गुंजाइश भी है
क्योंकि स्ट्रिंग्स का मूल्यांकन कोणीय भावों के रूप में किया जाता है, $ घड़ी का उपयोग अक्सर तब किया जाता है जब आप किसी मॉडल / स्कोप प्रॉपर्टी को देखना / देखना चाहते हैं। जैसे, attr1="myModel.some_prop"
फिर किसी कंट्रोलर या लिंक फंक्शन में: scope.$watch('myModel.some_prop', ...)
या scope.$watch(attrs.attr1, ...)
(या scope.$watch(attrs['attr1'], ...)
)।
(यदि आप कोशिश attrs.$observe('attr1')
करेंगे तो आपको स्ट्रिंग मिल जाएगी myModel.some_prop
, जो शायद आप नहीं चाहते हैं।)
जैसा कि @ PrimosK के उत्तर पर टिप्पणियों में चर्चा की गई है, सभी $ अवलोकन और $ घड़ियाँ हर पाचन चक्र की जाँच की जाती हैं ।
पृथक स्कोप वाले निर्देश अधिक जटिल हैं। यदि '@' सिंटैक्स का उपयोग किया जाता है, तो आप एक DOM विशेषता देख सकते हैं या $ देख सकते हैं, जिसमें प्रक्षेप (यानी, {{}} 's) हैं। (यह $ घड़ी के साथ काम करने का कारण है क्योंकि '@' सिंटैक्स हमारे लिए प्रक्षेप करता है, इसलिए $ घड़ी बिना {{}} के स्ट्रिंग को देखती है।) यह याद रखना आसान बनाने के लिए कि कब, किसका उपयोग करने का सुझाव है। इस मामले के लिए भी $ अवलोकन करें।
इस सब का परीक्षण करने में मदद करने के लिए, मैंने एक प्लंकर लिखा है जो दो निर्देशों को परिभाषित करता है। एक ( d1
) नया स्कोप नहीं d2
बनाता , दूसरा ( ) एक अलग स्कोप बनाता है। प्रत्येक निर्देश में समान छह विशेषताएँ हैं। प्रत्येक विशेषता $ अवलोकन और $ watch'ed दोनों है।
<div d1 attr1="{{prop1}}-test" attr2="prop2" attr3="33" attr4="'a_string'"
attr5="a_string" attr6="{{1+aNumber}}"></div>
लिंक फ़ंक्शन में $ अवलोकन और $ घड़ी के बीच अंतर देखने के लिए कंसोल लॉग को देखें। फिर लिंक पर क्लिक करें और देखें कि कौन से $ अवलोकन और $ घड़ियाँ क्लिक हैंडलर द्वारा किए गए संपत्ति परिवर्तनों से शुरू होती हैं।
ध्यान दें कि जब लिंक फ़ंक्शन चलता है, तो {{}}} वाले किसी भी गुण का मूल्यांकन अभी तक नहीं किया गया है (इसलिए यदि आप विशेषताओं की जांच करने का प्रयास करते हैं, तो आपको मिलेगा undefined
)। प्रक्षेपित मूल्यों को देखने का एकमात्र तरीका $ अवलोकन (या '@' के साथ एक अलग गुंजाइश का उपयोग करके $ घड़ी) का उपयोग करना है। इसलिए, इन विशेषताओं के मूल्यों को प्राप्त करना एक अतुल्यकालिक ऑपरेशन है। (और यही कारण है कि हमें $ निरीक्षण और $ घड़ी कार्यों की आवश्यकता है।)
कभी-कभी आपको $ अवलोकन या $ घड़ी की आवश्यकता नहीं होती है। जैसे, यदि आपकी विशेषता में कोई संख्या या बूलियन (स्ट्रिंग नहीं) है, तो बस एक बार इसका मूल्यांकन करें: attr1="22"
तो, कहें, आपका लिंकिंग फ़ंक्शन var count = scope.$eval(attrs.attr1)
:। यदि यह सिर्फ एक निरंतर स्ट्रिंग है - attr1="my string"
- तो बस attrs.attr1
अपने निर्देश में उपयोग करें ($ eval () की कोई आवश्यकता नहीं)।
$ वॉच भावों के बारे में वोज्टा का गूगल समूह पोस्ट भी देखें ।