13

अन्य नियंत्रक एक ही मॉड्यूल के अलावा है कि में एक नियंत्रक इंजेक्षन करना संभव है से एक और नियंत्रक के अंदर नियंत्रक सम्मिलित करें?AngularJS: एक ही मॉड्यूल

उदाहरण:

var app = angular.module('myAppModule', []) 
 
.controller('controllerOne', ['$scope'. function($scope){ 
 
    $scope.helloWorld = function(){ 
 
    return 'Hello World'; 
 
    } 
 
}]) 
 
.controller('controllerTwo', ['$scope', 'controllerOne', function($scope, controllerOne){ 
 
    console.log(controllerOne.helloWorld()); 
 
}])

मैं controllerOne पर अज्ञात प्रदाता मिलती रहती है। मैं नहीं देखता कि यह कैसे संभव है क्योंकि वे एक ही मॉड्यूल में सह-अस्तित्व में हैं। कोई भी सहायताकाफी प्रशंसनीय होगी।

+0

संभव डुप्लिकेट?] (http://stackoverflow.com/questions/9293423/can-one-controller-call-another) –

+0

मेरी समस्या में, मेरे नियंत्रक एक ही मॉड्यूल में स्थित हैं और पूरी तरह से कोणीय प्रारूप में लिखे गए हैं। आपके द्वारा प्रदान की गई पोस्ट नहीं थी, मैं शौकिया हूं और वास्तव में अन्य पोस्ट में कुछ भी समझ नहीं पाया। हालांकि आपके सुझाव के लिए धन्यवाद :) –

+0

सभी सुझावों के लिए धन्यवाद !!! आप सभी सही हैं, मैं साझा तर्क को एक कारखाने में ले जाउंगा, यह केवल आसान और सिरदर्द के कम से कम है। –

उत्तर

21

आप का उपयोग कर कि आप किसी अन्य

.controller('controllerTwo', ['$scope', '$controller', function($scope, $controller){ 
    $controller('controllerOne', {$scope: $scope}) 
    //inside scope you the controllerOne scope will available 
}]); 

करने के लिए एक नियंत्रक इंजेक्षन कर सकते हैं लेकिन डेटा

+0

यह एक अच्छा समाधान है लेकिन डेटा साझा करने के लिए सेवा/कारखाने का उपयोग करने के रूप में यह उतना अच्छा नहीं है? क्या होगा यदि मैं सिर्फ नियंत्रक में एक फ़ंक्शन का उपयोग करना चाहता हूं? क्या मैं इसके लिए $ नियंत्रक का उपयोग नहीं कर सकता? – gerl

+7

"लेकिन डेटा साझा करने के लिए सेवा/कारखाना पसंद करते हैं"। हाँ! हाँ! हाँ! – Rap

+0

क्या आप एक उदाहरण दे सकते हैं कि –

3

एक "सेवा" (या तो एक कारखाने/सेवा/प्रदाता) में अपने तर्क ले जाएँ। मैं व्यक्तिगत रूप से कारखानों को पसंद करता हूं, मैं this या अन्य विकल्पों के साथ ऐसा कुछ भी करने के बजाय अपनी खुद की वस्तु को नियंत्रित करना पसंद करता हूं।

सेवा का उपयोग करके, आप अपने नियंत्रकों से व्यापार तर्क को अमूर्त करने की क्षमता देते हैं, और उस तर्क को पुनः उपयोग करने योग्य -!

var app = angular.module('myAppModule', []) 

// typically people use the word Service at the end of the name 
// even if it's a factory (it's all the same thing really... 

.factory('sharedService', function() { 

    var methods = {}; 

    methods.helloWorld = function() { 
     return 'Hello World!'; 
    }; 

    // whatever methods/properties you have within this methods object 
    // will be available to be called anywhere sharedService is injected. 

    return methods; 
}) 

सूचना sharedService इंजेक्ट किया जाता है

.controller('ControllerOne', ['$scope', 'sharedService', function($scope, sharedService) { 
    $scope.helloWorld = sharedService.helloWorld(); 
}]) 

// Notice sharedService is injected here as well 
.controller('ControllerTwo', ['$scope', 'sharedService', function($scope, sharedService){ 

    // Now we can access it here too! 
    console.log(sharedService.helloWorld()); 
}]); 

साइड नोट: नियंत्रकों उनके महत्व को दिखाने के लिए पूंजीकृत किया जाना चाहिए!

सेवाओं :)

1

एक controllerTwo controllerOne रूप में एक ही फ़ंक्शन को कॉल करने की जरूरत है, तो आप इसे संभाल करने के लिए एक सेवा बनाना चाह सकते हैं की शक्ति। Angular Services - वे निर्भरता इंजेक्शन के माध्यम से आपके पूरे कार्यक्रम में पहुंच योग्य हैं।

var app = angular.module('myAppModule', []) 
.controller('controllerOne', ['$scope', 'Hello', function($scope, Hello){ 
    console.log(Hello.helloWorld() + ' controller one'); 
}]) 
.controller('controllerTwo', ['$scope', 'Hello', function($scope, Hello){ 
    console.log(Hello.helloWorld() + ' controller two'); 
}]) 
.factory('Hello', [function() { 
    var data = { 
     'helloWorld': function() { 
      return 'Hello World'; 
     } 
    } 

    return data; 
}]); 

आशा है कि इससे मदद मिलती है!

0

आप किसी अन्य नियंत्रकों में नियंत्रकों इंजेक्षन नहीं कर सकते केवल serviceProviers साझा करने के लिए service/factory पसंद करते हैं द्वारा $controller निर्भरता उपयोग करने की आवश्यकता इंजेक्शन योग्य हैं। यही कारण है कि आप नियंत्रक में अनकॉउन प्रदाता के रूप में त्रुटि प्राप्त कर रहे हैं।

उपयोग सेवाएँ बजाय और, नियंत्रकों में उन्हें इंजेक्षन अगर वहाँ कुछ आ कार्यक्षमता controllers.Services बीच साझा किया जा करने के लिए नियंत्रकों के बीच में डेटा साझा करने के लिए सबसे अच्छा तरीका है।

आप एक चर या समारोह की घोषणा या पर $ वस्तु कह सकते हैं rootScope, यह अपने पूरे आवेदन में मौजूद है। [एक नियंत्रक कॉल कर सकते हैं एक और की

Share data between AngularJS controllers

+0

$ रूटस्कोप का उपयोग करके कोणीय –

+0

में खराब पैटर्न के रूप में माना जाता है हां, यह $ रूटस्कोप का उपयोग करने का एक बुरा अभ्यास है, मैंने इसका उल्लेख किया क्योंकि यह विकल्पों में से एक है इस्तेमाल किया गया। – Ritesh

+0

आपको कभी भी '$ रूटस्कोप' का उपयोग नहीं करना चाहिए, यही कारण है कि मैं कह रहा हूं कि आप $ रूटस्कोप सुझाव उपयुक्त नहीं है –

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