2013-03-29 2 views
8

मुझे एक कंपाइलर उपकरण के साथ स्वचालित/सरल एंजुलर प्रोजेक्ट में यह रूचि है, जो कि बाकी सब कुछ पर काम कर सकती है, लेकिन कोणीय इंजेक्शन और नेमस्पेसिंग संकलक ज्ञान से बचने के लिए पर्याप्त अजीब है। ऐसा करने के लिए सबसे अच्छी/पेशेवर विधि क्या है?टिकाऊ कोणीय

धन्यवाद, बस एक आखिरी बात,

app.controller('ctrl',['$rootScope',function($rootScope){ 
    ... 
}]); 

काम करता है जब न्यूनतम किया गया है, लेकिन मैं कैसे

app.config(['$routeProvider', function($routeProvider){ 

}]); 

कम करें है और यह काम करता है जब मैं लगातार कार्रवाई कम करें?

app.controller(...).directive(...).run(...) 
+0

इन होना चाहिए सब काम ठीक। मेरी बिल्ड स्क्रिप्ट देखें: http://github.com/joshdmiller/ng-boilerplate। लेकिन मुझे यकीन नहीं है कि आप यहां विशेष रूप से क्या पूछ रहे हैं। आप क्या समस्या का सामना कर रहे हैं? –

+0

app.config (['$ रूटप्रोवाइडर', फ़ंक्शन ($ रूटप्रोवाइडर) {$ रूटप्रोवाइडर.something() ...}]); app.config में बदल जाता है (['$ रूटप्रोवाइडर', फ़ंक्शन (ई) {ef = function() ...} जब minified, और e-> eProvider त्रुटियों का कारण बनता है। तो क्या मुझे इस प्रक्रिया में कुछ याद आ रहा है? क्या मुझे इसका उपयोग करना चाहिए $ इंजेक्टर या $ ऐप में कहीं इंजेक्ट करें? – user2167582

+0

आपके द्वारा प्रदान किया गया कोड मेरे लिए काम करता है ठीक है - फिर से, उस लिंक को देखें। क्या आप फ़ंक्शन का बॉडी भी पोस्ट कर सकते हैं? –

उत्तर

11

कोणीय में, आप इंजेक्टर पता करने के लिए जो निर्भरता आप अपने समारोह में इंजेक्षन करना चाहते हैं के लिए काम करता है टिप्पणी करने की जरूरत है। आधिकारिक कोणीय वेबसाइट पर वर्णित आपके कार्य में निर्भरताओं को इंजेक्ट करने के मूल रूप से तीन तरीके हैं। तीन तरीके हैं:

इनलाइन सरणी एनोटेशन

yourModule.controller('yourController', ['$scope', function($scope) {}]); 

$ 2.Use समारोह से 3.Implictly संपत्ति एनोटेशन

var yourController = function($scope) {}; 

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

yourModule.controller('yourController', yourController); 

इंजेक्षन 1.Use पैरामीटर नाम

yourModule.controller('yourController', function($scope) {}); 

अब जब आप अपनी परियोजना को कम करते हैं, तो आपकी निर्भरता के नामों का नाम बदल दिया जाएगा। पहले मामले में अपने कोड होना तरह

yourModule.controller('yourController', ['$scope', function(e) {}]); 

तीसरे मामले में अपने कोड की तरह

yourModule.controller('yourController', function(e) {}); 

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

2

मैं https://github.com/olov/ng-annotate का उपयोग करने की सलाह दूंगा। यह आपको इस तरह अपना कोड लिखने की अनुमति देगा।

angular.module("MyMod").controller("MyCtrl", function($scope, $timeout) { 
}); 

और फिर nnnnotate इसे निम्न में बदल देता है जो खनन के लिए सुरक्षित है।

angular.module("MyMod").controller("MyCtrl", ["$scope", "$timeout", function($scope, $timeout) { 
}]); 
1

मिनीफाइवर तारों को छूता है, इसलिए हम सरणी नोटेशन का उपयोग करते हैं। चेनिंग विधियां मिनीफाईर स्ट्रिंग को बरकरार रखने के तरीके को बदल नहीं सकती हैं।

var app=module(myapp); 
app.config(['$routeProvider', function($routeProvider){ 
$routeProvider.dosomestuffs() 
}]); 

var a=module(myapp); 
a.config(['$routeProvider', function(b){ 
     b.dosomestuffs() 
}]); 

लेकिन कोणीय की तरह कुछ में न्यूनतम किया गया होगा यह अभी भी '$ routeProvider' स्ट्रिंग के लिए धन्यवाद चारों ओर अपना रास्ता मिल जाएगा।

0

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

app.controller(['$scope', function(mrScope) { 
    mrScope.yourProperty = 'it does not matter the dependency variable names if you use annotations'; 
}]); 
0

जब तक आप उन निर्भरताओं के लिए सरणी नोटेशन का उपयोग करते हैं, जिन्हें आप इंजेक्शन दे रहे हैं, कोई भी कमी की समस्या नहीं है। आपके द्वारा उपयोग किए जा रहे खनन उपकरण को बिना किसी परेशानी के आपके किसी भी उदाहरण को संभालना चाहिए (मेरी प्रोजेक्ट पर हम इसे पूरा करने के लिए uglify का उपयोग कर रहे हैं)।

असल में, अजीब नामित इंजेक्शन (डॉट्स और वर्णों के साथ नामित, जिसके परिणामस्वरूप ABC.CDE जैसे अमान्य फ़ंक्शन नाम होते हैं), सरणी नोटेशन उन्हें इंजेक्ट करने का सबसे अच्छा तरीका है।

0

मैं एक ही समस्या है जब कम करने के लिए किया था, और आप की तरह है, यह केवल .. मेरे लिए इस सवाल का जवाब उपयोग करने के लिए $inject विधि हिमांशु की तरह मेरे कॉन्फ़िगरेशन के लिए कहते हैं था $routeProvider config तत्वों के लिए विफल रहा है, यहां तक ​​कि वाक्य रचना आप के लिए दिखाने हालांकि आपका पहला उदाहरण मेरे नियंत्रकों के लिए काम करता है। तो मैं यहाँ के बाद से मैं नहीं दिख रहा है कि यह विशेष रूप से ऊपर जवाब में सूचीबद्ध मेरी .config() कोड पोस्ट करेंगे: कॉन्फ़िगरेशन के लिए मेरी त्रुटि

var app = angular.module('myApp'); 
var RouteProviderConfig = function ($routeProvider) { 
     $routeProvider 
      .when(...) 
      .otherwise(...); 
    }; 
RouteProviderConfig.$inject = ['$routeProvider']; 
app.config(RouteProviderConfig); 

यह तय, लेकिन मेरे नियंत्रकों तरह से अपना पहला उदाहरण लिखा है काम:

app.controller('ctrl',['$rootScope',function($rootScope){ 
    ... 
}]); 

Angular Documentation जो बताते हैं कि दोनों तरीकों से काम करना चाहिए लगता है, इसलिए मुझे लगता है कि यह संभव है वहाँ कोई अन्य विषय कॉन्फ़िगरेशन के साथ एक बग है, या $routeProvider, या ...