2015-05-06 15 views
26

क्षमा करें यदि यह प्रश्न बहुत स्पष्ट लगता है।AngularJS नियंत्रक को परिभाषित करते समय सरणी नोटेशन का उपयोग करने का कारण

मैंने हाल ही में एंगुलरजेएस की खोज और सीखना शुरू कर दिया है। मैं कुछ अच्छा ट्यूटोरियल के माध्यम से चला गया है -

.. और तो कुछ ऐसे कि मैंने देखा है कर रहे हैं।

मैं यह नहीं कह रहा हूं कि मैंने सभी दस्तावेजों को पढ़/पढ़ा है।

प्रश्न यहाँ शुरू होता है -

अब, सवाल करने के लिए आ, मुझे लगता है कि एक नियंत्रक की परिभाषा एक ही स्थान पर अलग है और इसमें कुछ अन्य अलग है -

एक परिभाषा एक तरह का उपयोग करता है इंजेक्शन के लिए सरणी संकेतन (आधिकारिक अवधि के बारे में सुनिश्चित नहीं) का:

app.controller("MyCtrl", ['$scope', function($scope){ 
    $scope.someData = "Array notation"; 
}]); 

और वहाँ यह कोई सरणी के साथ दिया गया है:

app.controller("MyCtrl", function($scope){ 
    $scope.someData = "non-array notation"; 
}); 

यह नहीं कह रहा कि यह एकमात्र चीज है जिसे मैं समझने की कोशिश कर रहा हूं लेकिन हां, मुझे निश्चित रूप से अंतर को समझना अच्छा लगेगा।

क्या दोनों के बीच कोई बड़ा अंतर है?

बहुत बहुत धन्यवाद।

नोट: मैंने SO में समान प्रश्नों की खोज की लेकिन मैं जो खोज रहा था उसे नहीं मिला। माफ़ कीजिये।

उत्तर

22

अंतर यह है कि जब दूसरा छोटा हो जाता है, तो पैरामीटर नाम को छोटा कर दिया जाएगा और कोणीय तर्कों का निरीक्षण करने में सक्षम नहीं होंगे, यह पता लगाने के लिए कि कौन सी निर्भरताओं को इंजेक्ट करना है। एक स्ट्रिंग में निर्भरता के साथ सरणी वाक्यविन्यास का अर्थ है कि यह खनन सुरक्षित है।

ng-annotate नामक एक लाइब्रेरी है जो दूसरे उदाहरण को पहले उदाहरण में बदल देगी ताकि कोड फिर से छोटा हो सके।

+0

तो, minification के अलावा अन्य कोई अन्य मतभेद हैं? अगर मैं बिना किसी कमी के जाता हूं तो मैं या तो उपयोग कर सकता हूं। – Yellen

+1

@ सेराम सही है, यह आपके कोड को सुरक्षित रखने के लिए पूरी तरह से है जब इसकी –

+0

@ सेराम सही है। यद्यपि आप तब तक खनन कर सकते हैं जब तक आप पहले एनजी-एनोटेट के माध्यम से अपना कोड चलाते हैं। –

1

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

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

तो संक्षेप में आप पहले विकल्प का उपयोग, छोटे थोड़ा और अधिक टाइपिंग शामिल है, लेकिन यह सुरक्षित है और तोड़ नहीं करेगा जब आप :-)

This अपने कोड कम करें काफी एक संक्षिप्त ट्यूटोरियल है बेहतर हैं, लेकिन यह अच्छी तरह से बताते हैं ।

6

दो दृष्टिकोणों के बीच बहुत अंतर नहीं है। दोनों कोड एक ही तरीके से काम करता है। लेकिन यदि आप दूसरे कोड का उपयोग करते हैं तो यह आपके कोड को कम करने के बाद आपको भ्रमित कर देगा। एक उदाहरण के लिए

देखो: -

app.controller("MyCtrl", function(a){ ... });//$scope is changed to a 

और अपने कोड मानकों के आधार पर के रूप में AngularJS कोड $ गुंजाइश चर का उपयोग करता है के रूप में यह पहले नहीं ले करता है काम नहीं करेगा, दूसरा, तीसरा, और इसलिए।

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

देखो:

app.controller("MyCtrl", ['$scope', function(a){...}]);//a refers to $scope 

तो, इसके बाद के संस्करण कोड ठीक काम करता है के रूप में $ गुंजाइश a.So के स्थान पर इंजेक्ट किया जाता है जब आप कोड कम करें, यदि आप तो इस में मामले को आदेश देने से अधिक पैरामीटर पारित उदाहरण। निम्नलिखित में

देखो:

app.controller("MyCtrl", ['$scope','$timeout' ,function(a,t){...}]); 

जहां एक$ गुंजाइश और टी के रूप में इंजेक्ट किया जाता है के रूप में $ समयबाह्य इंजेक्ट किया जाता है।

तो अगर आप के रूप में

app.controller पारित कर दिया मापदंडों के आदेश को बदलने ("MyCtrl", [ '$ टाइमआउट', '$ विषय-क्षेत्र', समारोह (एक, टी) {...}]) ; जहां एक है $ समयबाह्य और टी$ गुंजाइश है।

तो, इस उदाहरण में मामलों को ऑर्डर करना, लेकिन आपके दूसरे उदाहरण कोड ऑर्डरिंग में $ स्कोप, $ टाइमआउट जैसे नामों के मामले में कोई फर्क नहीं पड़ता।

वहाँ भी है एक और तरीका है चर सुई अगर आप नीचे दिए की तरह अपना पहला उदाहरण कोड का उपयोग करें:

MyCtrl.$inject = ['$scope']; 

से अधिक पैरामीटर के लिए,

MyCtrl.$inject = ['$scope','$timeout']; 

तो, वहाँ मुख्य रूप से एनोटेशन के तीन प्रकार हैं:

  1. लागू एनोटेशन - आपका पहला उदाहरण कोड
  2. $ इंजेक्षन संपत्ति एनोटेशन - $ इंजेक्षन विधि
  3. इनलाइन सरणी एनोटेशन - अपने दूसरे उदाहरण कोड

आप के बारे में अधिक जान सकते हैं यह here

संबंधित मुद्दे

 संबंधित मुद्दे