我正在尝试模块化我的第一个角度项目。需要使我的模块视图相对于此模块。在下面的示例中,我有样本主模块,需要控制器模块。我可以将VIEWS_PATH
注入控制器,但不注入config()
。据我所知,constant
可以注入config()
。这有什么问题?
mainModule.js
angular.module('mainModule', ['app.main.controllers'])
.constant('VIEWS_PATH', 'js/modules/main/views');
controllersMain.js
angular.module('app.main.controllers', [])
.config(function($routeProvider, VIEWS_PATH) { // error
$routeProvider.when('/hello', {
templateUrl: VIEWS_PATH+'/hello.html',
controller: 'HelloController'
})
})
.controller('HelloController', function($scope, VIEWS_PATH) {
$scope.hello = 'Hello World!';
console.log('VIEWS_PATH: '+VIEWS_PATH); // ok
});
答案 0 :(得分:2)
这是因为您在一个模块中定义了VIEWS_PATH
常量 - mainModule
并且您尝试在另一个模块中使用它 - app.main.controllers
。
如果您希望在该模块的配置中使用该常量,可以在app.main.controllers
模块中定义该常量。
angular.module('app.main.controllers', [])
.constant('VIEWS_PATH', 'js/modules/main/views')
.config(function($routeProvider, VIEWS_PATH) {
$routeProvider.when('/hello', {
templateUrl: VIEWS_PATH+'/hello.html',
controller: 'HelloController'
});
});
但app.main.controllers
模块中的常量将在mainModule
中工作,因为它在mainModule
中列为依赖项,如下所示。
angular.module('mainModule', ['app.main.controllers']);
例如,我们说我们定义了两个模块 - MyApp
& SomeModule
var someModule = angular.module('SomeModule',['someOtherModule']);
someModule.constant('SOME_CONSTANT','SomeValue');
var myApp = angular.module('MyApp',['SomeModule']);
myApp.constant('TEST_CONSTANT','Test');
myApp.config(function(SOME_CONSTANT){
console.log("from dependent module "+SOME_CONSTANT);
});
通过上述设置,来自SOME_CONSTANT
的{{1}}可以在SomeModule
中使用,但来自MyApp
的{{1}}无法在TEST_CONSTANT
中使用。
这里有一个样本Pen。