【问题标题】:How to inject modules properly in AngularJS如何在 AngularJS 中正确注入模块
【发布时间】:2014-04-13 16:14:43
【问题描述】:

假设我有 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

那么任何人都可以给我一个提示如何正确注入模块 - 服务等。

【问题讨论】:

  • 您这里指的不是一个名为“myApp.auth.services.Auth”的模块吗?我没有看到这里定义。

标签: javascript angularjs angular-services


【解决方案1】:

您不能使用相同的名称初始化两个模块。您应该将其命名为不同的名称,或者只是再次调用它: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)

【讨论】:

    【解决方案2】:

    每个模块都应该注入依赖的库/模块

    //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)
    

    一旦定义了模块,就必须直接使用它,而不是每次使用时都定义它。

    【讨论】:

      猜你喜欢
      • 2018-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-13
      • 2021-02-04
      • 2013-04-04
      • 2014-10-24
      相关资源
      最近更新 更多