2014-04-30 17 views
15

Mam dwa pliki, w których definiuję usługi w mojej aplikacji kątowej, ale kiedy próbuję użyć ich obu w mojej dyrektywie, pojawia się błąd informujący, że dostawca usług nie został znaleziony dla jakiejkolwiek dyrektywy, którą zdefiniuję jako drugą. Wygląda na to, że jedna usługa nadpisuje drugą. Jeśli zmienię definicję modułu w service2.js na myapp.services2, to działa. Myślę, że mógłbym dodać wiele fabryk do tego samego modułu w ten sposób. Czy ktoś może wskazać, co robię nieprawidłowo?Angularjs definiowanie usług dla tego samego modułu w różnych plikach

service1.js:

var services = angular.module('myapp.services',[]); 
services.factory('Service1', function() { 
    // service code 
}); 

service2.js:

var services = angular.module('myapp.services',[]); 
services.factory('Service2', function() { 
    // service code 
}); 

mydirective.js:

angular.module('myappdirective', []).directive('myapp', ['Service1', 'Service2', 
function(service1,service2) { 
    // directive code 
}]); 
+0

Definiujesz moduł usług dwa razy. Musisz go zdefiniować tylko raz (w jednym pliku). W moim najnowszym projekcie przeniosłem linię var services = angular.module do jej własnego pliku js (na pewno przesada). – aet

+0

nie powinno to wyglądać po raz drugi, a nie przedefiniować? –

+0

Jeśli usuniesz matrycę wtryskową, myślę, że będzie działać w ten sposób - angular.module ("myapp.services"); – aet

Odpowiedz

44

to jest z dokumentów:

B eware, które za pomocą angular.module ("mójModuł", []) utworzy moduł myModule i nadpisze istniejący moduł o nazwie myModule. Użyj angular.module ("myModule"), aby pobrać istniejący moduł.

znaleźć tutaj: https://docs.angularjs.org/guide/module

+16

Zabawne, że obecna implementacja wprowadza w błąd prawie wszystkich. 'angular.createModule (, ), angular.retrieveModule ()' nie wzbudziłoby tak wielu pytań! ;) Również dodanie '[]' przez pomyłkę jest bardzo trudne do wykrycia. – Mirko

+1

Myślę, że to dość oczywiste. Jestem przyzwyczajony do pracy z JQuery, więc rzeczy takie jak '.width()' vs. '.width (newWidth)' są całkiem banalne, przynajmniej dla mnie. Poza tym, zaskoczy Cię to tylko raz. Następnym razem, gdy zobaczysz błąd wtryskiwacza informujący, że modułu nie można znaleźć, będziesz wiedział, że zrobiłeś to ponownie;) – tfrascaroli

0

Jest to możliwe, jednak będzie podatny na błędy, dlatego nie zaleca się

dokonać drobnych modyfikacji, co już robisz

Tylko nie ponownie zadeklaruj zmienną modułu w innych plikach innych niż service1.js lub umieść definicję modułu w pliku własnym i dołącz te pliki JS w kolejności od Module.js, services.js, dyrektyw.js, następnie zadziała

Powiązane problemy