2014-04-09 6 views
22

Und jetzt verstehe ich nicht, wie möglich ist, dass ich auf den Service-Status zugreifen kann, der auf einem anderen Modul definiert ist?AngularJS Zugangsdienst von anderem Modul

'use strict'; 

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

Ich sollte nicht richtig? Aber irgendwie bin ich ... oder ist das ein korrektes Verhalten?

Antwort

42

Eine Module ist eine Sammlung von Konfigurations- und Ausführungsblöcken, die während des Bootstrap-Prozesses auf die Anwendung angewendet werden. Module können andere Module als ihre Abhängigkeiten auflisten. Abhängig von einem Modul bedeutet, dass benötigt Modul muss geladen werden, bevor die erfordern Modul geladen ist.

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

Wenn Sie Ihr Modul injiziert wird, wurden die Dienste während der Konfigurationsphase registriert und Sie darauf zugreifen können, so eine lange Geschichte kurz zu machen, dann ist es das richtige Verhalten und die wesentlichen Grundlagen der Dependency Injection in Angular. Zum Beispiel

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

So wie es angular.module('mymodule');

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

zugegriffen werden kann dies, wie auf sie zugegriffen werden kann. Wenn jemand einen anderen Vorschlag hat, sag es bitte.

+3

Alex ... Sie haben gerade eine sehr nette Antwort gepostet. Sauber, einfach, verständlich. Vielen Dank! – EnchanterIO

0

Ich hatte ein ähnliches Problem beim Versuch, Abhängigkeiten von einem anderen Modul zu injizieren. Alex 'Antwort funktionierte nicht für mich. Ich habe einen Fehler mit zirkulären Abhängigkeiten erhalten.

Um es zu beheben, stellen Sie sicher, dass Sie alle modulspezifischen JavaScript vor enthalten. Zum Beispiel wurde moduleA in einer anderen JS-Datei definiert.

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

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

    $scope.hello = MainService.hello(); 

}); 

Arbeitsbeispiel Plunker

+1

Alex 'dritter Satz ist _ "Abhängig von einem Modul bedeutet, dass das ** ** ** - Modul geladen werden muss, bevor das ** ** ** - Modul geladen wird."_ – Michael

0

nach einige Änderungen vorgenommen html aussehen sollte:

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

Above Abschnitt des Codes verwendet, um Ihre Winkelmodul Bootstrap

Winkel sollte wie folgt aussehen:

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; 
    }); 

Erläuterung: erstellt ein Hauptmodul MyModule und andere Module injizieren (in meinem Fall module1 und module2) als Abhängigkeit so durch das Sie sowohl im Hauptmodul das Modul zugreifen und die Daten zwischen ihnen

console.log(mod1factory.getData()) ; 
console.log(mod2factory.getData()) ; 
teilen

erstellt zwei Fabrik und injiziere es in meinem Controller mod1factory und mod12factory in meinem Fall. so mod1 & mod2 sind beide verschiedene Module aber können Informationen teilen. Inside Hauptcontroller myModule

+0

Können Sie eine ausführlichere Erläuterung Ihrer Lösung geben? –

Verwandte Themen