需要在AngularJS中创建两次模块

时间:2015-01-21 13:37:17

标签: javascript angularjs

如果首先创建app.userModule.services模块(index.js)然后实例化以创建工厂(UserService.js),为什么会出现以下错误?

  

未捕获错误:[$ injector:unpr]未知提供者:$ resourceProvider   < - $ resource< - UserService

只有我在UserService中创建模块(添加了[' ngResource'] ),该应用才能正常工作。

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

问题:为什么忽略user / services / 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中。

1 个答案:

答案 0 :(得分:0)

因为angular.module('someName', ['list', 'of', 'dependencies']);定义模块的方式,angular.module('someName')是获取已定义模块的实例(检索)的方式。

如果您定义相同的模块两次,则第二个定义将覆盖第一个 - 您将丢失在第一个定义中定义的所有内容。

It's all in the docs.

更新: 浏览器首先加载app.js并且仅在加载app/components/user/services/index.js之后 因此,根据app.js中的内容,index.js中的所有代码都会中断。

这是您无法在UserService中引用app.js的原因。它尚未宣布。