具有不同模块的AngularJS DI

时间:2015-05-07 13:24:30

标签: javascript angularjs

我在尝试使用不同模块的Angular依赖注入时遇到了一些问题。目前,我有以下内容。在我的index.html中,文件按以下顺序加载(<body>标记的结尾):

  1. network.js
  2. authentication.js
  3. login.js
  4. app.js
  5. network.js

    angular.module('services.network', [])
      .factory('Network', ['$http', '$state', function ($http, $state) { ... }]);
    

    authentication.js

    angular.module('services.authentication', ['services.network'])
      .factory('Authentication', ['$state', 'Network', function ($state, Network) { ... }]);
    

    login.js

    angular.module('controllers.login', [])
      .controller('LoginCtrl', ['$scope', function ($scope) { ... }]);
    

    app.js

    var app = angular.module('parkmobi', [
        'ngRoute',
        'services.network',
        'services.authentication',
        'controllers.login'
    ]);
    
    app.run(['$rootScope', function ($rootScope) {
        $rootScope.$on('$viewContentLoaded', function () {
            $(document).foundation('reflow');
        });
    }])
    
    app.config(['$routeProvider', function ($routeProvider) {
    
        $routeProvider
    
        .when('/', {
            templateUrl: 'templates/login.html',
            controller: 'LoginCtrl'
        });
    }]);
    

    到目前为止,一切似乎都很开心。但是,现在,我想在Authentication中使用LoginCtrl服务,我认为这样做的工作如下:

    login.js

    angular.module('controllers.login', ['services.authentication'])
      .controller('LoginCtrl', ['$scope', 'Authentication', function ($scope, Authentication) { ... }]);
    

    但是,这会导致以下注入错误:

    Error: [$injector:unpr] http://errors.angularjs.org/1.3.15/$injector/unpr?p0=%24stateProvider%20%3C-%20%24state%20%3C-%20Authentication
    R/<@http://localhost/testapp/vendor/angularjs/angular.min.js:6:417
    

1 个答案:

答案 0 :(得分:1)

出现错误是因为您已在$state工厂注入了Authentication个提供商,而ui.router app.js模块中没有parkmobi个模块。

它应该使用$route代替$state,因为您正在使用angular-router进行路由。

angular.module('services.authentication', ['services.network'])
  .factory('Authentication', ['$route', 'Network', function ($route, Network) { ... }]);

或者如果您想使用ui-router,则需要在注册$stateProvider s&amp;时使用stateui.router模块应该包含在您的应用中。