2016-01-20 51 views
2

我试图模块化我的第一个角度项目。需要使我的模块视图相对于这个模块。在下面的示例中,我有示例主模块,即需要控制器模块。我可以向控制器注入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 
}); 
+1

它很清楚在文档中解释:https://docs.angularjs.org/guide/providers#constant-recipe(只读整个部分,你应该知道它)。 – Andy

回答

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_CONSTANTSomeModule可以MyApp使用,但TEST_CONSTANTMyApp不能SomeModule使用。

下面是一个示例Pen的行动。

+0

你知道为什么我的示例中的'VIEWS_PATH'在'controller()'中被注入好吗?我想如果它在'controller()'中工作,那么应该在'config()'中工作...... – marioosh