2013-04-29 11 views
44

मैं डिफ़ॉल्ट सेटिंग्स के साथ कोणीय-बीज टेम्पलेट का उपयोग करने की कोशिश कर रहा हूं। controllers.js में मैं का उपयोग

angular.module('myApp.controllers', []). 
    controller('MyCtrl1', [function($scope) { 
     $scope.test = 'scope found!'; 
    }]) 
    .controller('MyCtrl2', [function() { 

    }]); 

वहाँ $scope हमेशा अनिर्धारित रहता है। जब मैं नियंत्रक को मॉड्यूल से बाहर ले जाता हूं और इसे वैश्विक रूप से पंजीकृत करता हूं तो यह ठीक काम करता है। यहां के रूप में:

function MyCtrl1($scope) { 
    $scope.test = "scope found!"; 
} 
MyCtrl1.$inject = ['$scope']; 

क्या कोई मुझे समझा सकता है कि यह क्यों है?

उत्तर

65

आप ऐसी चीजों को मिश्रित नहीं कर सकते हैं। आप दो संभावनाओं में से एक पर फैसला करने की जरूरत है:

app = angular.module('test', []); 

// possibility 1 - this is not safe for minification because changing the name 
// of $scope will break Angular's dependency injection 
app.controller('MyController1', function($scope) { 
    // ... 
}); 

// possibility 2 - safe for minification, uses 'sc' as an alias for $scope 
app.controller('MyController1', ['$scope', function(sc) { 
    // ... 
}]); 

मैं दूसरे वाक्य रचना जो नियंत्रक सीधे वाणी का प्रयोग कर सलाह नहीं होगी। आपके ऐप के विकास के साथ जल्द या बाद में इसे बनाए रखना और ट्रैक रखना मुश्किल हो जाएगा। लेकिन अगर आप चाहिए, वहाँ 3 संभावनाएं हैं:

function myController1 = function($scope) { 
    // not safe for minification 
} 

function myController2 = ['$scope', function(sc) { 
    // safe for minification, you could even rename scope 
}] 

var myController3 = function(sc) { 
    // safe for minification, but might be hard 
    // to read if controller code gets longer 
} 
myController3.$inject = ['$scope']; 
+1

समझा के लिए धन्यवाद। मैं अभी भी जानना चाहता हूं कि उनके टेम्पलेट में Google द्वारा प्रदान किए गए डिफ़ॉल्ट वाक्यविन्यास का उपयोग करके $ स्कोप का संदर्भ कैसे प्राप्त करें: angular.module ('myApp.controllers', [])। नियंत्रक ('MyCtrl1', [फ़ंक्शन() { }]) । नियंत्रक ('MyCtrl2', [फ़ंक्शन() { }]); –

+0

@ आश्रफफायद '$ स्कोप 'का संदर्भ प्राप्त करने का एकमात्र तरीका उपर्युक्त तरीकों में से एक में नियंत्रक को परिभाषित करना है। – TheHippo

+0

पूरी तरह से सच नहीं है, असल में आप जो सोचते हैं वह इसे करने का सबसे पसंदीदा तरीका है। – finishingmove

0

मैं भी है कि एक के लिए खोज रहा था, ऐसा लगता है कि आप समारोह से पहले '$scope' टाइप करने के लिए, जैसा कि नीचे की जरूरत है:

angular.module('myApp.controllers', []). 
    controller('MyCtrl1', ['$scope', function($scope) { 
     $scope.test = 'scope found!'; 
    }]) 
    .controller('MyCtrl2', ['$scope',function() { 

    }]); 

यह थोड़े बनाता है भावना, मुझे लगता है कि इसे और अधिक स्पष्ट है, हालांकि होना चाहिए ..

+0

'' $ scope'' को इसकी सही जगह पर रखने की आवश्यकता थी। – Zeeshan

17

यह उचित तरीका है:

angular.module('myApp.controllers', []); 

angular.module('myApp.controllers').controller('MyCtrl1', ['$scope', function($scope) { 

}]); 
-1

जब आप $ स्कोप का उपयोग कर रहे हैं तो आप आसानी से '[' और ']' को हटा सकते हैं।

angular.module('myApp.controllers', []). 
 
controller('MyCtrl1', function($scope) { 
 
    $scope.test = 'scope found!'; 
 
    }) 
 
    .controller('MyCtrl2', [ 
 
    function() { 
 

 
    } 
 
    ]);

+0

गुंजाइश (या किसी अन्य को, उस मामले के लिए) का उपयोग करते समय आप * बस * हटा नहीं सकते हैं। यदि आप खनन के बारे में परवाह नहीं करते हैं, तो आप इसे कर सकते हैं, जो कुछ अलग है। –

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