AngularJS और डॉलर वेरिएबल्स का उपयोग


128

क्या किसी को पता है कि अगर एंगुलरजेएस में डॉलर के तरीकों और चर के उपयोग के पीछे तर्क एंगुलरजेएस को उन मूल्यों की जांच से बचने के लिए निर्देश देना है जब पाचन हो रहा है? तो, यदि कोणीय भर में आता है $scope.$valueऔर $scope.valueयह पूर्व की जाँच करने से बचेगा, क्योंकि यह इसके चर नाम में एक डॉलर के चरित्र के साथ उपसर्ग करता है?


इस ब्लॉग पोस्ट को, "$ स्कोप" और "स्कोप" के अंतर पर angularjs में देखें ...
MarcoS

19
कोणीय शायद jQuery से $ दूर लेने की कोशिश कर रहा है।
daniel1426

यह लिंक उस पृष्ठ पर रीडायरेक्ट करता है जो $ गुंजाइश के बारे में बहुत कुछ नहीं समझाता है।
पॉल ब्रानन

5
निर्देश के लिए डॉक्स - नियंत्रक के पास है $scope, लेकिन निर्देश है scope। WTF?
लीजी

जवाबों:


87

डॉलर के संकेत के साथ कुछ समय पहले के कोणों को अनदेखा किया जाता है:

  1. में Schumli की टिप्पणी से नीचे है, जहां json फिल्टर उन्हें उत्पादन नहीं होगा
  2. {{ }}निर्देश का उपयोग करते समय , कोणीय नेस्टेड $ चर नहीं दिखाएंगे । उदाहरण के लिए यह केवल visibleसंपत्ति को प्रदर्शित करता है ।

    <div ng-init="n = { visible: 'foo', $ignore: 'bar' };">{{ n }}</div>
  3. इसके अतिरिक्त जब एक स्कोप ऑब्जेक्ट पर एक स्पष्ट द्रष्टा जोड़ते हैं, तो इस ऑब्जेक्ट के एक प्रमुख डॉलर के संकेत के साथ गुणों में परिवर्तन पर नजर रखने वाले को ट्रिगर नहीं किया जाएगा। देखिए यह अपडेटेड फील

  4. angular.equals() के साथ उपसर्ग की अनदेखी की$


हाँ लगता है कि आप सही हैं। यहां तक ​​कि क्लिक की घटनाओं और इसके साथ अभी भी बदल जाता है। धन्यवाद।
मात्सको

7
एंगुलर के कुछ हिस्से हैं जो उपसर्गों के गुणों को अनदेखा करते हैं, उदाहरण के लिए 'json' फ़िल्टर एक चर को '$' से शुरू नहीं करेगा।
शमूली

116

यह नीचे दिए गए स्निपेट http://docs.angularjs.org/tutorial/step_05 से नामकरण सम्मेलन है

'$' उपसर्ग नामकरण कन्वेंशन
आप अपनी सेवाएं स्वयं बना सकते हैं, और वास्तव में हम ठीक यही कदम 11 में करेंगे। नामकरण सम्मलेन के रूप में, कोणीय की अंतर्निहित सेवाएँ, स्कोप विधियाँ और कुछ अन्य कोणीय एपीआई में '$' उपसर्ग होता है नाम के सामने। अपनी सेवाओं और मॉडलों का नामकरण करते समय, किसी भी संभावित नामकरण टकराव से बचने के लिए '$' उपसर्ग का उपयोग न करें।

http://docs.angularjs.org/guide/concepts#angular_namespace

कोणीय
नाम स्थान आकस्मिक नाम टकराव को रोकने के लिए, कोणीय उन वस्तुओं के नामों को उपसर्ग करता है जो संभवतः $ से टकरा सकते हैं। कृपया अपने कोड में $ उपसर्ग का उपयोग न करें क्योंकि यह गलती से कोणीय कोड से टकरा सकता है।


2
निर्देशक डॉक्टर [1] $scopeनियंत्रक में क्यों है , लेकिन scopeनिर्देशन में क्यों है? --- [1] docs.angularjs.org/guide/directive
लीजी

2
@LeeGee यह सिर्फ सम्मेलन है। stackoverflow.com/a/19289054/114558
rinogo

30

$उपसर्ग एक चर, पैरामीटर, संपत्ति या विधि कि कोणीय के कोर के अंतर्गत आता है को दर्शाता है।

उन वस्तुओं पर गुण जो रूपरेखा के अंदर उत्पन्न होते हैं, लेकिन वास्तव में एपीआई का हिस्सा नहीं हैं, निजी पद्धति या संपत्ति को निरूपित करने के लिए $- या - से भी शुरू हो सकते हैं। यह उसी तरह है जैसे उपसर्ग अक्सर अन्य पुस्तकालयों में उपयोग किया जाता है।$$_

जिस तरह से रनटाइम द्वारा कोड की व्याख्या की जाती है, उस पर इसका कोई प्रभाव नहीं पड़ता है, हालांकि फ्रेमवर्क स्वयं इसे विशेष अर्थ दे सकता है। मूल रूप से, यह एक नामकरण सम्मेलन है जो कहता है कि "आपको इसके साथ गड़बड़ नहीं करना चाहिए"।


मुझे लगता है कि आप गलत समझ रहे हैं। क्रम परवाह नहीं करता क्या चर नाम हैं। आप इसे कॉल कर सकते हैं $$__$_$- यह सिर्फ एक पहचानकर्ता है जिसमें दुभाषिया के लिए कोई विशेष अर्थ नहीं है।
डालगार्ड

मैंने रनटाइम और फ्रेमवर्क के बीच अंतर को उजागर करने के लिए कुछ शब्द जोड़े; अपने वोट को बदलने के लिए दयालु बनें।
दालगार्ड

7

पूरी तरह से निश्चित नहीं है, लेकिन मुझे विश्वास है कि एंगुलरजेएस इंटर्ल्स पाचन के दौरान इन $ -प्रेरूफ़ किए गए चर को हेरफेर करने पर भरोसा करते हैं। इन चरों को जाँचने का अर्थ होगा कि पाचन कभी स्थिर नहीं होगा, क्योंकि वे पाचन के प्रत्येक चक्र के दौरान लगातार बदल सकते हैं।

हालांकि इस पर मुझे उद्धृत मत करो। :)


10
निम्न के कारण: "मुझे इस पर उद्धृत न करें"। क्षमा करें, लेकिन एक जवाब जो अनिश्चितता को स्वीकार करता है वह बहुत उपयोगी नहीं है :(
डेविड रिवर

2
डाउनवोट अप में परिवर्तित हो गया- आप सही मान रहे हैं, यह अब एक उपयोगी जवाब है!
डेविड रिवर

2
@DavidRivers, अगर जवाब शुरू में झिझक के रूप में आया था, तो इसे फिर से लिखना अधिक उपयोगी नहीं होगा। वास्तव में, उत्तर गलत हो सकता है और झिझक की कमी संभावित गलतता पर जोर देगी । इसके बजाय, इस उत्तर को उपयोगी माना जाने के लिए, इसे विश्वसनीय स्रोतों का हवाला देते हुए कुछ प्रमाण के साथ बैकअप दिया जाना चाहिए , या व्यक्त किए गए बिंदुओं को पुन: पेश करने के लिए एक बेला प्रदान करना चाहिए ।
Ivaylo Slavov

1
@IvayloSlavov: मैं आपसे पूरी तरह सहमत हूँ। मैंने माना (संभवतः गलत तरीके से) कि उत्तर देने वाले ने दो बार जांच की कि वह सही था और उसने अनिश्चितता को दूर करने के लिए केवल उत्तर नहीं दिया। मुझे लगता है कि मुझे स्रोत या फ़िडल्स चाहिए थे।
डेविड रिवर

1
@ एलेक्सफोर्ड: अरे, यार। माफी के लिए धन्यवाद! मुझे खेद है कि मैं स्पष्ट नहीं था और यह सब गलत तरीके से शुरू किया। आपकी बात मान्य है और मैं आपसे सहमत हूं। मैं सिर्फ यह सुनिश्चित करना चाहता था कि मुझे गलत तरीके से प्रस्तुत नहीं किया जा रहा है, लेकिन मैं अपने शब्दों के साथ स्पष्ट नहीं था। वैसे भी, कोई कठिन भावनाएं नहीं हैं और मैं वास्तव में सम्मान करता हूं कि आप मेरी बात देखने में सक्षम थे। चियर्स मैन!
डेविड रिवर्स

5

मैं हमेशा $सेवा के लिए "एस" जैसा दिखता हूं ।


इसका सही उत्तर है। यह तार्किक और सरल है। ये वास्तव में सेवाएं हैं इसलिए $ 'S' को याद रखना बेहतर है। अच्छी सरल व्याख्या।
योन्क

2
$ गुंजाइश एक सेवा है?
जून'१17

5

डॉलर ( $ ) के संकेत भी तत्वों को कुछ निर्देशों में पुनरावृत्त (या व्याख्या) होने से रोकते हैं। इसलिए उदाहरण के लिए गुण जो $ से शुरू होते हैं, उनका उपयोग लूप में एक क्लॉज केng-repeat कारण नहीं किया जाता है :

if(collection.hasOwnProperty(key) && key.charAt(0) != '$')

किसी ने यहाँ विषय के बारे में एक मुद्दा बनाया कोणीय github पृष्ठ पर


विधि में shallowCopyगुण जो $ $ से शुरू होते हैं, एक उचित खण्ड की पुनरावृत्ति करते समय यदि किसी क्लॉज के कारण छोड़ दिए जाते हैं :

if (!(key.charAt(0) === '$' && key.charAt(1) === '$')) {

1

@MarcoS ने https://thinkster.io/a-better-way-to-learn-angularjs/scope-vs-scope को लिंक प्रदान किया जो $ स्कोप और स्कोप के बीच अंतर बताता है। मुझे यह उपयोगी लगा, अन्य उत्तरों में जानकारी जोड़ते हुए।

एक कोणीय निर्देश में एक लिंक और नियंत्रक होता है। लिंक मापदंडों के एक निश्चित सेट के साथ एक मानक कार्य है: गुंजाइश, तत्व, गुण वस्तु।

नियंत्रक की दलीलों को एंगुलर इंजेक्टर द्वारा प्रबंधित किया जाता है और यह निर्भर नहीं होता है। इंजेक्टर $ के साथ शुरू होने वाले मापदंडों की तलाश में किन वस्तुओं को पारित करना है, इसका समाधान करता है।

Https://thinkster.io/a-better-way-to-learn-angularjs/scope-vs-scope के लेखक इसे समझाने का बेहतर काम करते हैं।


-1

एक बहुत बड़ा अंतर है, चर में नहीं, बल्कि एक नियंत्रक को प्राप्त होने वाले मापदंडों में। एक गुंजाइश पैरामीटर $ गुंजाइश एक से पूरी तरह से अलग है।

अधिक जानकारी के लिए, इस उपयोगी पोस्ट को देखें: http://www.thinkster.io/angularjs/aw9kWmdnik/angularjs-scope-vs-scope

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.