2015-01-21 2 views
0

Если модуль app.userModule.services создается первым (index.js), а затем создается для создания фабрики (UserService.js), почему я получаю следующую ошибку?Модуль должен быть создан дважды в AngularJS

Uncaught Error: [$injector:unpr] Unknown provider: $resourceProvider <- $resource <- UserService

Только если я создаю модуль в UserService (добавлен [ ''] ngResource) приложение работает правильно.

angular.module('guotay.userModule.services', [ 'ngResource' ]).factory(... 

Вопрос: Почему содержание пользователей/услуг/index.js игнорируется ??

Структура проекта и некоторые части кода:

Structure

index.html:

<script src="app/app.js"></script> 
<script src="app/components/user/index.js"></script> 
<script src="app/components/user/controllers/index.js"></script> 
<script src="app/components/user/controllers/LoginCtrl.js"></script> 
<script src="app/components/user/services/index.js"></script> 
<script src="app/components/user/services/UserService.js"></script> 

И то же самое с другими модулями

пользователя/index.js

angular.module('app.userModule', [ 'app.userModule.controllers', 
      'app.userModule.services' ]).config(function config($routeProvider) {...}); 

пользователя/услуги/index.js

angular.module('app.userModule.services', []); 

пользователя/услуги/UserService.js

var serviceId = 'UserService'; 

angular.module('app.userModule.services').factory(serviceId, [ '$resource', 
     serviceFunc ]); 

function serviceFunc($resource) {...} 

app.js

angular.module('app', ['ngRoute', 'ngCookies', 'app.userModule', 'app.newsEntryModule']) 
    .config(...) 
    .run(function($rootScope, $location, $cookieStore, UserService) { 
      UserService.get(function(user) { 
       $rootScope.user = user; 
       $location.path(originalPath); 
      });}); 

У меня есть другие услуги с той же реализации, и они работают правильно с созданием модуля в index.js, но они не отображаются в app.js.

+0

Почему вы не указываете 'ngResource' в качестве зависимости в user/services/index.js? – JLRishe

ответ

0

Поскольку angular.module('someName', ['list', 'of', 'dependencies']); путь вы определить модуль и angular.module('someName') путь вы получаете экземпляр (извлечения) из уже определенного модуля.

Если вы определите тот же модуль дважды, то второе определение будет переписать первый - вы потеряете все, что вы определили в первом.

It's all in the docs.

Update: браузер сначала загружает app.js и только после он загружает app/components/user/services/index.js Таким образом, любой код в app.js в зависимости от материала, из index.js сломается.

По этой причине вы не можете указать UserService в app.js. Это еще не объявлено.

+0

Я знаю, что я определил сначала в user/services/index.js, и я пытаюсь получить экземпляр в user/services/UserService.js, но безуспешно. Вот почему я должен определиться дважды, потому что первое определение в index.js не работает, оно всегда игнорируется индексом.js (объясняется в первых строках моего сообщения) –

+0

Но почему вы пытаетесь внедрить 'UserService' в app.js, когда' module ('app') 'не перечисляет' 'app.userModule.services'' как зависимость? И даже если вы сделали, как «app.js» должен ссылаться на него, когда вы загружаете «app/components/user/services/UserService.js» позже? –

+0

app.js list app.userModule, app.userModule перечисляет app.userModule.services и есть функциональность. В index.html сначала указаны index.js с определениями, а затем использование экземпляров, которые ранее были определены в этих индексах. Я следую этой структуре, и она хорошо работает в приложении, за исключением этого случая. Что я делаю не так? –

Смежные вопросы