2013-07-25 27 views
26

Przypuśćmy, że mam dwa moduły dla AngularJS, np. foo i bar, a oba z nich definiują usługę o nazwie baz.Jak korzystać z dwóch usług AngularJS o tej samej nazwie z różnych modułów?

W mojej aplikacji zależy od nich, mówiąc:

var app = angular.module('app', [ 'foo', 'bar' ]); 

Wtedy staram się korzystać z usługi baz w kontrolerze za pomocą

app.controller('blaController', [ '$scope', 'baz', function($scope, baz) { 
    // ... 
}]); 

Jak mogę określić, które z tych dwóch usługi, z których chciałbym skorzystać? Czy istnieje coś takiego jak w pełni kwalifikowana nazwa?

+2

możliwy duplikat [Jak określić wartości o tej samej nazwie z różnych modułów] (http://stackoverflow.com/questions/15342657/how-to-reference-values-with-same-name-od- różne moduły) – Stewie

+0

możliwy duplikat usług ["Namespacing" w AngularJS] (http://stackoverflow.com/questions/14909474/namespacing-services-in-angularjs) –

+0

możliwy duplikat [Modules and name clashes in Angularjs] (http://stackoverflow.com/questions/13406791/modules-and-name-clashes-in-angularjs) – shannon

Odpowiedz

37

Lokalizator usług wyszukuje usługi według nazwy (angularjs guide DI). Jednak "Namespacing" services in AngularJS:

dzień dzisiejszy angularjs nie obsługiwać kolizje nazw dla usług więc jeśli masz 2 różnych modułów z usługą o nazwie samo sposób i dołączyć oba moduły w swojej aplikacji, tylko jeden usługa będzie dostępna w postaci .

Myślę, że można zrobić pełną nazwę „ręcznie”: nazwa usługi foo.baz i bar.baz zamiast zwykłego baz. To rodzaj samo-złudzenia. Co więcej, pisanie tego w ten sposób nie sprawia, że ​​przestrzeń nazw jest prawdziwa, ale inna osoba czytająca kod może tak myśleć.

+1

Zapomniałem wspomnieć, że możesz złagodzić to przy zamknięciach '(function() {module declaration}());' –