2014-02-06 4 views
5

Lassen Sie uns sagen, ich habe drei Fabriken mit dem gleichen Namen DSerrorLog jeder unter verschiedenen ModulAngularJS: eine Fabrik/Service mit identischen Namen Injizieren aber unter anderen Modul

angular.module('module1').factory('DSerrorLog', function() { 
    return { show: false, msg: "" }; 
}); 
angular.module('module2').factory('DSerrorLog', function() { 
    return { show: false, msg: "" }; 
}); 
angular.module('module3').factory('DSerrorLog', function() { 
    return { show: false, msg: "" }; 
}); 

Wie spritze ich die richtigen Instanzen aus dem richtigen Modul ein zB DSerrorLog unter module3 in meine Steuerung? Ich nehme an, Syntax wie module3.DSerrorLog wird hier nicht funktionieren.

angular.module('mainApp', ['module1', 'module2', 'module3']) 
    app.controller('MainCtrl', function ($scope, DSerrorLog) { 
}); 

Antwort

7

Coole Frage!

Es stellt sich heraus, dass die Reihenfolge, die Sie sie einschließen, beeinflusst, welche Sie erhalten. Grundsätzlich überschreibt jedes zusätzliche Modul den Injektor. In Ihrem Beispiel wird DSerrorLog von module3 kommen, wenn Sie es einfach normal injizieren.

Es stellt sich heraus, dass Sie den Injektor für andere Module erhalten können, wenn Sie sie verwenden möchten. Hier ist eine Geige, wo ich zeigen, wie das zu tun: http://jsfiddle.net/7YH7p/

app.controller('myCtrl', ['$scope', '$injector', 'test', 
    function($scope, $injector, test) { 
     $scope.injected = test.data; 
     var inj = angular.injector(['mod1']); 
     $scope.my_inject = inj.get('test').data; 
}]); 

Die beiden haben unterschiedliche Werte!

Hoffe das half!

+0

Ich sehe jetzt. Vielen Dank! – lolski

Verwandte Themen