2013-02-11 38 views
13

मैं एक नियंत्रक इस तरह पंजीकृत है:मैं अपने कोणीय निर्देश में एक पंजीकृत नियंत्रक का उपयोग कैसे कर सकता हूं?

myModule.controller('MyController', function ($scope, ...some dependencies...) 
{ 
    .... 

एचटीएमएल यह सब ठीक काम करता है में ng-controller="MyController" का उपयोग करना है, लेकिन अब मैं अपने निर्देश के नियंत्रक के रूप में इस नियंत्रक का उपयोग करना चाहते हैं। इस तरह कुछ बात:

otherModule.directive('myDirective', function() { 
    return { 
     restrict: 'A', 
     replace: true, 
     controller: ??????????, 
     scope: { 
      foo: '=', 
      blah: '=', 
     }, 
     template: '....' 
    } 
}); 

मैं थक सिर्फ MyController लेकिन यह त्रुटियों और कहा कि "MyController परिभाषित नहीं है" डाल। मुझे यकीन है कि अगर मैं वैश्विक नामस्थान में MyController डालता हूं, तो यह ठीक काम करेगा, लेकिन मुझे वैश्विक नामस्थान में कुछ भी नहीं चाहिए। यदि यह कोई फर्क पड़ता है, myModule को otherModule के लिए निर्भरता के रूप में परिभाषित किया गया है। मेरे निर्देश के उपयोग के लिए मैं इस नियंत्रक का संदर्भ कैसे प्राप्त कर सकता हूं?

के रूप में सुझाव दिया, मैं $controller('MyController') की कोशिश की, लेकिन अब मैं निम्न त्रुटि हो रही है:

Error: Unknown provider: $scopeProvider <- $scope <- myDirectiveDirective 
at Error (<anonymous>) 
at http://localhost/resources/angular.js?_=1360613988651:2627:15 
at Object.getService [as get] (http://localhost/resources/angular.js?_=1360613988651:2755:39) 
at http://localhost/resources/angular.js?_=1360613988651:2632:45 
at getService (http://localhost/resources/angular.js?_=1360613988651:2755:39) 
at invoke (http://localhost/resources/angular.js?_=1360613988651:2773:13) 
at Object.instantiate (http://localhost/resources/angular.js?_=1360613988651:2805:23) 
at http://localhost/resources/angular.js?_=1360613988651:4621:24 
at otherModule.directive.restrict (http://localhost/resources/app.js?_=1360613988824:862:15) 
at Object.invoke (http://localhost/resources/angular.js?_=1360613988651:2786:25) 

मुझे यकीन है कि क्या इस त्रुटि के बनाने के लिए नहीं कर रहा हूँ। क्या यह काम करने के लिए और ज़रूरी है?

+0

यह थोड़ा एक निर्देश के नियंत्रक निर्माता समारोह के निर्देश के बाहर परिभाषित किया जा करने के लिए अजीब है (पुनश्च:। पी: इस lol मत करो)। यदि किसी अन्य कारण के लिए, इंजेक्शन योग्य तर्क निर्देशक कन्स्ट्रक्टर कन्स्ट्रक्टर फ़ंक्शंस के लिए एनजी-कंट्रोलर प्रकार नियंत्रक कन्स्ट्रक्टर फ़ंक्शंस के लिए अलग हैं। –

उत्तर

25

ऐसा लगता है कि तुम सिर्फ उपयोग कर सकते हैं:

controller: 'MyController' 

यदि नियंत्रक के निर्देश या एक उच्च स्तर उस में निर्देश के साथ मॉड्यूल से बना मॉड्यूल के रूप में एक ही मॉड्यूल में है।

जब मैंने इसे एक ऐप मॉड्यूल (नियंत्रक के लिए एक और निर्देश के लिए एक) में दो अलग-अलग मॉड्यूल के साथ करने की कोशिश की, तो यह काम नहीं किया।

+0

+1 यह उत्तर सबसे अच्छा है ... लेकिन किसी और के लिए जो इसे पाता है और किसी अन्य मॉड्यूल में नियंत्रक तक पहुंचने की आवश्यकता है, मैंने एक और जवाब जोड़ा है। –

+1

इस तरह से 'MyController' का एक नया उदाहरण बनाता है ... क्या मौजूदा किसी तक पहुंचने का कोई तरीका है? – JaKXz

+1

नहीं आप नहीं कर सकते। यदि आप नियंत्रक को साझा करना चाहते हैं, तो एक div ng-controller में निर्देशों को घोंसला दें और अलग-अलग दायरे का उपयोग न करें। –

10

जवाब आप पहले से ही काम करता है स्वीकार कर लिया है, और में लगभग सभी मामलों चुना जाना चाहिए ...

पूर्णता के लिए के लिए: यहाँ कैसे आप किसी अन्य मॉड्यूल से एक नियंत्रक का उपयोग कर सकते है

var app = angular.module('myApp', ['myDirectives']); 

app.controller('AppCtrl1', function($scope) { 
    $scope.foo = 'bar'; 
}); 


var directives = angular.module('myDirectives', []); 

directives.directive('test', function($controller) { 
    return { 
     template: '<h1>{{foo}}</h1>', 
     link: function(scope, elem, attrs) { 
      var controller = $controller('AppCtrl1', { $scope: scope }); 

      console.log($scope.foo); //bar 
     } 
    }; 
}); 
+3

उत्तर के लिए धन्यवाद, और आप सही हैं, हमें यह नहीं करना चाहिए। – James

+0

क्यों नहीं? मुझे बहुत साफ दिखता है। –

+2

@nikkwong Well, FWIW, सौंदर्य दर्शक की आंखों में है ... लेकिन एक निर्भरता ए ($ नियंत्रक) को इंजेक्शन देना एक निर्भरता बी (AppCtrl1) हार्डकोडिंग निर्भरता द्वारा बी की निर्भरता ($ स्कोप) फ़ंक्शन कॉल में बिल्कुल नहीं है मैं "साफ" कहूंगा। –

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

  • कोई संबंधित समस्या नहीं^_^