AngularJS为什么我不能与另一个模块共享提供者?

时间:2014-08-14 00:16:18

标签: javascript angularjs angularjs-service

我有一个App模块,它有许多组件模块注入App模块。 App模块有一个我想在组件模块中使用的提供程序,但是我收到一个注入器错误:Error: $injector:modulerr Module Error

这是我正在尝试的

var App = angular.module('App', [
    'ngRoute',
    'Blog',
    'Media',
    'Pages',
]);
App.provider('Core', function() {

    this.baseDirectory = '/test';

    this.$get = function() {
        var baseDirectory = this.baseDirectory;
    }
});

App.config(['$routeProvider', 'CoreProvider', function($routeProvider, CoreProvider) {

    $routeProvider
        .when(CoreProvider.baseDirectory + '/admin', {
            templateUrl: baseUrl + '/backend/scripts/angular/index.html'
        })
        .otherwise({
            template: ""
        });
}]);

以上所有代码都有效,当我尝试在另一个模块中使用CoreProvider时,例如Blog(已注入App模块)

var Blog = angular.module('Blog', ['ngRoute']);


Blog.config(['$routeProvider', 'CoreProvider', function($routeProvider, CoreProvider) {

    $routeProvider
        .when(CoreProvider.baseDirectory + '/admin/blog', {
            templateUrl: CoreProvider.baseDirectory + '/blog/blog.html',
            controller: 'BlogController'
        });
}]);

我收到错误Error: $injector:modulerr Module Error,Angular文档声明当模块由于异常而无法加载时会发生此错误。

为什么我不能在我的Blog模块中使用CoreProvider

1 个答案:

答案 0 :(得分:2)

如果您只需要共享基本目录,为什么不使用常量?

var shared = angular.module('Shared',[]);

shared.constant('baseDirectory', '/test');

// Use the constant on your modules:

var module1 = angular.module('Module1', ['Shared']);

module1 .config(['baseDirectory', function(baseDirectory) {
    console.log(baseDirectory + '/admin2');
}]);

var module2 = angular.module('Module2', ['Shared']);

module2.config(['baseDirectory', function(baseDirectory) {
    console.log(baseDirectory + '/admina');
}]);

这是一个有效的傻瓜:http://plnkr.co/edit/wktdqCMZuvDbk7sz1mMi?p=preview

我想这是一种更好的做法,有关详细信息,请参阅:https://docs.angularjs.org/guide/providers