2014-04-09 8 views
22
'use strict'; 

var trkiApp = angular.module('trkiApp', [ 
    'trkiApp.tStatus', 
    'trkiApp.feed' 
]); 



var tStatus = angular.module('trkiApp.tStatus', []) 
    .factory('Status', ['$q']); 

var feed = angular.module('trkiApp.feed', []); 

और अब मुझे समझ में नहीं आता कि मैं किसी अन्य मॉड्यूल पर परिभाषित सेवा स्थिति तक कैसे पहुंच सकता हूं?विभिन्न मॉड्यूल से AngularJS एक्सेस सेवा

'use strict'; 

feed 
    .controller('FeedController', ['$scope','$http','Status']); 

मुझे सही नहीं होना चाहिए? लेकिन किसी भी तरह से मैं ... या यह एक सही व्यवहार है?

उत्तर

42

Module कॉन्फ़िगरेशन और रन ब्लॉक का संग्रह है जो बूटस्ट्रैप प्रक्रिया के दौरान एप्लिकेशन पर लागू होता है। मॉड्यूल अन्य मॉड्यूल को उनकी निर्भरताओं के रूप में सूचीबद्ध कर सकते हैं। मॉड्यूल के आधार पर इंगित करता है कि आवश्यक मॉड्यूल से पहले लोड होने की आवश्यकता है मॉड्यूल लोड होने की आवश्यकता है।

var myModule = angular.module('myModule', ['module1','module2']); 

आप अपने मॉड्यूल इंजेक्शन है, सेवाओं विन्यास चरण के दौरान पंजीकृत हो गया और आप उन तक पहुँच सकता है, इसलिए एक लंबे कहानी कम करने के लिए, यह सही व्यवहार और कोणीय में निर्भरता इंजेक्शन के कोर बुनियादी बातों है। उदाहरण

angular.module('module1').service('appservice', function(appservice) { 
    var serviceCall = $http.post('api/getUser()',"Role"); 
}); 

के लिए तो यह कैसे angular.module('mymodule');

angular.module('mymodule').controller('appservices',function(appservice) 
{ 
    var Servicedata= appservice.ServiceCall('role'); 
} 

यह है कि यह कैसे पहुँचा जा सकता है का उपयोग कर पहुँचा जा सकता है। अगर किसी के पास कोई और सुझाव है तो कृपया ऐसा कहें।

+3

एलेक्स ... आपने अभी एक बहुत अच्छा जवाब पोस्ट किया है। स्वच्छ, सरल, समझने योग्य। धन्यवाद! – EnchanterIO

0

मुझे एक और मॉड्यूल से निर्भरताओं को इंजेक्ट करने का प्रयास करते समय भी एक ही समस्या थी। एलेक्स का जवाब मेरे लिए काम नहीं करता था। मुझे एक परिपत्र निर्भरता त्रुटि मिल रही थी।

इसे ठीक करने के लिए, सुनिश्चित करें कि आप पहले सभी मॉड्यूल-विशिष्ट जावास्क्रिप्ट को शामिल कर रहे हैं। उदाहरण के लिए moduleA किसी अन्य जेएस फ़ाइल में परिभाषित किया गया था।

var app = angular.module('plunker', ['moduleA']); 

app.controller('MainCtrl', function($scope, MainService) { 
    $scope.name = 'World'; 

    $scope.hello = MainService.hello(); 

}); 

कार्य उदाहरण Plunker

+1

एलेक्स की तीसरी वाक्य _ है "एक मॉड्यूल के आधार पर तात्पर्य है कि ** आवश्यक ** मॉड्यूल ** ** मॉड्यूल लोड होने से पहले लोड होना आवश्यक है।"_ – Michael

0

कुछ परिवर्तन एचटीएमएल की तरह दिखना चाहिए बनाया के बाद:

<body ng-app="myModule" ng-controller="appservices"></body> 

कोड की धारा से ऊपर अपने कोणीय मॉड्यूल bootstrap करने के लिए इस्तेमाल

कोणीय तरह दिखना चाहिए:

var myModule = angular.module('myModule', ['module1','module2']); 
    myModule.controller("appservices",["$scope","mod1factory","mod2factory",function($scope,mod1factory,mod2factory){ 

     console.log(mod1factory.getData()) ; 
     console.log(mod2factory.getData()) ; 
    }]); 
    var mod1 = angular.module('module1',[]); 
    mod1.factory("mod1factory",function(){ 
     var mod1result = {}; 
     mod1result = { 
      getData: function(){ 
       return "calling module 1 result"; 
      } 
     } 
     return mod1result; 
    }); 
    var mod2 = angular.module('module2',[]); 
    mod2.factory("mod2factory",function(){ 
     var mod2result = {}; 
     mod2result = { 
      getData: function(){ 
       return "calling module 2 result"; 
      } 
     } 
     return mod2result; 
    }); 

स्पष्टीकरण: एक मुख्य मॉड्यूल myModule बनाया है और अन्य मॉड्यूल इंजेक्षन निर्भरता के रूप में (मेरे मामले module1 और module2 में) तो यह द्वारा आप उन दोनों के बीच

console.log(mod1factory.getData()) ; 
console.log(mod2factory.getData()) ; 
डेटा मुख्य मॉड्यूल के अंदर दोनों मॉड्यूल का उपयोग कर सकते हैं और साझा

ने दो कारखाने बनाए और इसे मेरे कंट्रोलर mod1factory और mod12factory में मेरे मामले में इंजेक्ट किया। तो mod1 & mod2 दोनों भिन्न मॉड्यूल हैं लेकिन जानकारी साझा कर सकते हैं। मुख्य नियंत्रक के अंदर myModule

+0

क्या आप अपने समाधान की पूर्ण व्याख्या प्रदान कर सकते हैं? –

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