2012-07-29 26 views
6
angular.directive('ppd:reset', function(e1,e2) { 
    return function(linkElement) {  
     linkElement.wrap().... 
     }); 
    }; 
}); 

औरकोणीय निर्देशों पैटर्न

angular.directive('ppd:reset', [function() { 
     return function(scope, elm, attrs) { } 

}]); 

इन दो निर्देशों पैटर्न में क्या अंतर है के विभिन्न प्रकार?

उत्तर

17

आप ब्रैकेट अंकन के साथ अपने कारखानों घोषित हैं, तो आप समस्याओं से बचने कर सकते हैं जब आपके कोड को कम करने:

angular.directive('ppd:reset', ["$compile", function(compile) { 
    return function(scope, elm, attrs) { } 

}]); 

इंजेक्टर आदेश को पता है कि सुई में अपने समारोह पैरामीटर नाम पर लग रहा है। यदि एक अल्पसंख्यक प्रक्रिया उनको नाम देती है, इंजेक्टर को नहीं पता कि अब और क्या करना है। मायन निश्चित रूप से स्ट्रिंग मानों को स्पर्श नहीं करेगा, यही कारण है कि सरणी नोटेशन ठीक काम करता है।

+2

आप इसे "इनलाइन एनोटेशन" शीर्षक पर DI दस्तावेज़ में पा सकते हैं http://docs.angularjs.org/guide/di#inlineannotation – Oliver

+0

ठीक है, आप कम वर्बोज़ सिंटैक्स और nseMin के साथ पार्स स्रोत का भी उपयोग कर सकते हैं :) https : //github.com/btford/ngmin –

4

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

angular.directive('ppd:reset', ['$timeout', function($timeout) { 
     return function(scope, elm, attrs) { } 
}]); 
+1

कोणीय अभी भी दोनों रूपों में निर्भरता इंजेक्शन करता है। अंतर खनन को संभालने में है क्योंकि दूसरे उत्तर का तात्पर्य है। – markt

+0

मैं minification टिप्पणी से सहमत हूं, हालांकि, मूल पोस्ट था (जैसा कि मैंने इसे पढ़ा था) एक सरणी बनाम सरणी नहीं होने के संबंध में था। मैंने minification बिट का उल्लेख करने के बारे में सोचा नहीं था। मैं नहीं देखता कि मेरा जवाब गलत कैसे है। –

+0

आपका उत्तर फ्लैट आउट कहता है कि पहला वाक्यविन्यास उन निर्देशों को लिखने के लिए है जिन्हें इंजेक्शन की आवश्यकता नहीं है .. लेकिन यह सच नहीं है। कोणीय दोनों के लिए निर्भरता इंजेक्षन करने का प्रयास करेगा। – markt

0

दोनों के बीच का अंतर यह है कि [] ब्रैकेट नोटेशन मिनीफायर स्ट्रिंग को कम नहीं करता है क्योंकि मिनीफायर कम से कम नहीं है। उदाहरण के लिए, यदि आप इसे बिना जावास्क्रिप्ट कम करें करने की कोशिश है, यह हो जाएगा:

angular.module('myApp', []) 
.controller('MainController', function($scope) { 
}); 

में

angular.module("myApp",[]).controller("MainController",function(e){}) 

इस मामले में मुद्दा यह है कि कोणीय एक बात e के बारे में के रूप में करने का विरोध किया पता नहीं है $scope, जो इसे जानता है। [] ब्रैकेट नोटेशन का उपयोग करके, हम $injector को पहले से ही बता सकते हैं कि हम नियंत्रक को किस प्रकार पहुंच प्राप्त करना चाहते हैं। चूंकि मिनीफायर स्ट्रिंग को कम नहीं करते हैं (और नहीं कर सकते हैं), यह निर्भरता इंजेक्शन एंजुलर के बिना या बिना मिनीफियर के सुविधा का उपयोग करने का एक सुरक्षित तरीका है।

वाक्यविन्यास के मतभेदों की गहरी समझ के लिए, आप एनजी-बुक (https://www.ng-book.com/) देख सकते हैं। अस्वीकरण, मैं पुस्तक के लेखक और http://www.ng-newsletter.com/ के लेखक हूं।

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