meaning - angularjs tutorial pdf




क्या मुझे `this` या` $ scope` का उपयोग करना चाहिए? (6)

नियंत्रक कार्यों तक पहुंचने के लिए उपयोग में दो पैटर्न हैं: this और $scope

मुझे किसका उपयोग करना चाहिए और कब? मैं समझता हूं कि this नियंत्रक पर सेट है और $scope विचारों के लिए दायरे श्रृंखला में एक वस्तु है। लेकिन नए "नियंत्रक के रूप में नियंत्रक" वाक्यविन्यास के साथ, आप आसानी से या तो उपयोग कर सकते हैं। तो मैं जो पूछ रहा हूं वह सबसे अच्छा है और भविष्य के लिए दिशा क्या है?

उदाहरण:

  1. इसका उपयोग करना

    function UserCtrl() {
      this.bye = function() { alert('....'); };
    }
    
    <body ng-controller='UserCtrl as uCtrl'>
      <button ng-click='uCtrl.bye()'>bye</button>
    
  2. $scope का उपयोग करना

    function UserCtrl($scope) {
        $scope.bye = function () { alert('....'); };
    }
    
    <body ng-controller='UserCtrl'>
        <button ng-click='bye()'>bye</button>
    

मैं व्यक्तिगत रूप से इस this.name को आंखों पर आसान और अन्य जावास्क्रिप्ट ओओ पैटर्न की तुलना में अधिक प्राकृतिक this.name जाता this.name

सलाह कृपया?


मैं एक संयोजन पसंद करते हैं।

कुछ मॉक डेटा के साथ पॉप्युलेट करने के बाद $ स्कोप का एक सरल कंसोल.लॉग और 'यह' आपको दिखाएगा।

$ स्कोप नियंत्रक के कवर भागों के नीचे पहुंच की अनुमति देता है, उदाहरण के लिए:

$$ChildScope: null;
$$childHead: null;
$$childTail: null;
$$listenerCount: Object;
$$listeners: Object;
$$nextSibling: Scope;
$$prevSibling: null;
$$watchers: null;
$$watcherCount: 0;
$id: 2;
$parent: Object;
foo: 'bar';

** $$ के साथ गुण और विधियों को एंगुलर टीम के साथ गड़बड़ करने की अनुशंसा नहीं की जाती है, लेकिन $ $ माता-पिता और $ आईडी के साथ कूल सामान करने के लिए $ सुरक्षित गेम हो सकता है।

'यह' सीधे-बिंदु पर जाता है, 2-तरफा-बाध्य डेटा और फ़ंक्शंस संलग्न करता है। आप केवल देखेंगे कि आपने क्या जोड़ा है:

foo: 'bar';

तो मैं एक संयोजन क्यों पसंद करूं?

यूई-राउटर नेस्टेड ऐप्स में, मैं मुख्य नियंत्रक तक पहुंच सकता हूं, बाल नियंत्रक के अंदर सार्वभौमिक मानों और कार्यों को सेट और कॉल कर सकता हूं:

मुख्य नियंत्रक में:

// Main Controller
var mainCtrl = this;
mainCtrl.foo = 'Parent at the bar';

बाल नियंत्रक में:

// Child Controller
var mainCtrl = $scope.$parent.mainCtrl;
var childCtrl = this;

// update the parent from within the child
childCtrl.underageDrinking = function(){
    mainCtrl.foo = 'Child at the bar';
}

// And then attach the child back to a property on the parent controller!
mainCtrl.currentCtrl = childCtrl;

अब, आप अभिभावक से बच्चे और बच्चे के भीतर से माता-पिता तक पहुंच सकते हैं!



कोणीय दस्तावेज स्पष्ट रूप से आपको बताता है कि इसका उपयोग this की अनुशंसा की जाती है। कि, इस तथ्य के अतिरिक्त कि $scope हटा दी जा रही है मेरे लिए कभी भी $scope उपयोग करने का पर्याप्त कारण नहीं है।


जेसन 328 "एंगुलर 2.0 में $ स्कोप हटाया जा रहा है" मेरे लिए एक अच्छा कारण लगता है। और मुझे विकल्प बनाने में मदद करने का एक और कारण मिला: this अधिक पठनीय है - जब मैं HTML में fooCtrl.bar देखता fooCtrl.bar , तो मुझे तुरंत पता है कि bar की परिभाषा कहां fooCtrl.bar

अपडेट: this समाधान पर स्विच करने के this देर बाद, मैंने $scope जिस तरह से कम टाइपिंग की आवश्यकता है उसे याद करना शुरू कर दिया


दोनों के पास उनके उपयोग हैं। सबसे पहले, कुछ इतिहास ...

$ स्कोप "क्लासिक" तकनीक है जबकि "कंट्रोलर एज़" बहुत हालिया है (आधिकारिक तौर पर संस्करण 1.2.0 के रूप में हालांकि यह इससे पहले अस्थिर पूर्व-रिलीज़ में दिखाई देता था)।

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

कौनसा? वह आप पर निर्भर करता है। $ स्कोप के बाहर कई और उदाहरण हैं, लेकिन "कंट्रोलर" भी भाप उठा रहा है। क्या यह दूसरे से बढ़िया है? कि यह बहस का मुद्दा है। तो आप कैसे चुनते हैं?

आराम

मैं "नियंत्रक के रूप में" पसंद करता हूं क्योंकि मुझे $ स्कोप छिपाना और नियंत्रक से सदस्यों को मध्यस्थ वस्तु के माध्यम से देखने के लिए उजागर करना पसंद है। इसे सेट करके। *, मैं केवल उस नियंत्रक से संपर्क करना चाहता हूं जिसे मैं नियंत्रक से देखने के लिए खोलना चाहता हूं। आप $ scope के साथ भी ऐसा कर सकते हैं, मैं इसके लिए मानक जावास्क्रिप्ट का उपयोग करना पसंद करता हूं। असल में, मैं इसे इस तरह कोड करता हूं:

var vm = this;

vm.title = 'some title';
vm.saveData = function(){ ... } ;

return vm;

यह मेरे लिए क्लीनर महसूस करता है और यह देखने में आसान बनाता है कि दृश्य के संपर्क में क्या आ रहा है। नोटिस मैं वेरिएबल का नाम देता हूं जिसे मैं "vm" देता हूं, जो व्यूमोडेल के लिए खड़ा है। यह सिर्फ मेरा सम्मेलन है।

$ स्कोप के साथ मैं वही काम कर सकता हूं, इसलिए मैं तकनीक के साथ जोड़ या विचलित नहीं कर रहा हूं।

$scope.title = 'some title';
$scope.saveData = function() { ... };

तो यह आप पर निर्भर है।

इंजेक्शन

$ स्कोप के साथ मुझे नियंत्रक में $ स्कोप इंजेक्ट करने की आवश्यकता है। मुझे इसे नियंत्रक के साथ ऐसा करने की ज़रूरत नहीं है, जब तक कि मुझे इसे किसी अन्य कारण (जैसे $ प्रसारण या घड़ियों) की आवश्यकता नहीं है, हालांकि मैं नियंत्रक में घड़ियों से बचने की कोशिश करता हूं)।

अद्यतन मैंने इस पोस्ट को 2 विकल्पों के बारे में लिखा: http://www.johnpapa.net/do-you-like-your-angular-controllers-with-or-without-sugar/


मुझे लगता है कि नियंत्रक बेहतर है क्योंकि यह टोड मोटो द्वारा वर्णित अनुसार आसानी से घोंसले के घोटाले की अनुमति देता है:

http://toddmotto.com/digging-into-angulars-controller-as-syntax/

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

इसके अलावा आप 2.0 में जा रहे दायरे से निकल सकते हैं।







angularjs