我有一个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
?
答案 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