Как правильно вставлять модули в AngularJS

Предположим, у меня есть каталоги js/modules/auth js/modules/home js/modules/panel. Мой основной app.js выглядит так:

angular.module('myApp.homeApp', ['myApp.homeApp.services']);
angular.module('myApp.auth', ['myApp.auth.services']);
angular.module('myApp.panelApp', []);

Затем я ввожу их так:

var myApp = angular.module('myApp', ['ngCookies', 'ui.router', 'ui.bootstrap', 'angular.css.injector', 'myApp.auth', 'myApp.homeApp', 'myApp.panelApp'])

У меня есть в js/modules/auth/services/authService.js две фабрики:

angular.module('myApp.auth.services', [])
.factory('Auth', function($http, $cookieStore)

angular.module('myApp.auth.services', [])
.factory('Users', function($http)

В основном я пытаюсь реализовать https://github.com/fnakstad/angular-client-side-auth Но когда у меня в app.js есть строка:

myApp.run(['$rootScope', '$state', 'myApp.auth.services.Auth', function ($rootScope, $state, Auth)

Я получаю: Неперехваченная ошибка: [$injector:unpr] Неизвестный поставщик: myApp.auth.services.AuthProvider

Так может ли кто-нибудь дать мне подсказку, как правильно вводить модули-сервисы и т. д.?


person Thomas    schedule 13.04.2014    source источник
comment
Разве вы не имеете в виду модуль с именем «myApp.auth.services.Auth»? Я не вижу, что здесь определено.   -  person David M. Karr    schedule 13.04.2014


Ответы (2)


У вас не может быть двух модулей, инициализированных с одним и тем же именем. Вы должны либо назвать его по-другому, либо просто вызвать его во второй раз: angular.module('some_name',[]) инициализирует новый модуль, а angular.module('some_name') вызовет существующий модуль.

   angular.module('myApp.auth.services', [])
   .factory('Auth', function($http, $cookieStore)

   angular.module('myApp.auth.services')
   .factory('Users', function($http)
person goutham    schedule 13.04.2014

Каждый модуль должен внедрять зависимые библиотеки/модули.

//module injection indicates Module definition. When you see `[]` is used, 
//a module is defined

angular.module('myApp.homeApp', ['ngRoute', 'ngResource']); //for example
angular.module('myApp.auth', []);
angular.module('myApp.panelApp', []);

var myApp = angular.module('myApp', ['ngCookies', 'ui.router', 'ui.bootstrap',
                                     'angular.css.injector', 'myApp.auth',  
                                     'myApp.homeApp', 'myApp.panelApp'])

Отныне для использования модуля вам не нужно внедрять зависимости, поэтому

angular.module('myApp.auth.services', [])
.factory('Auth', function($http, $cookieStore)

angular.module('myApp.auth.services')
.factory('Users', function($http)

Как только модуль определен, его нужно использовать напрямую, а не определять его каждый раз, когда он используется.

person dmahapatro    schedule 13.04.2014