我可以在 Angular 中使用全局常量而不注入控制器吗?
Can I use a global constant in Angular without injection into controller?
在coffeescript中,我定义了一个常量对象:
angular
.module 'main',
[]
.constant 'CONFIG',
IMAGEROOT: 'http://some-img.s3-website-ap-southeast-1.amazonaws.com/'
在html中,我使用这样的常量:
<img ng-src="{{CONFIG.IMAGEROOT}}assets/img/
可以这样做:
.controller 'HomeCtrl', ($scope, CONFIG) ->
$scope.CONFIG=CONFIG
虽然这很好用,但每个控制器都需要以 $scope.CONFIG=CONFIG
开头,这看起来很笨拙。有没有办法使常量成为全局常量(任何 $scope 都可以访问)?
添加一个最外层控制器(父作用域)来存储这个常量是正确的方法吗?
您可以将 CONFIG 添加到 "parent" 范围(外部元素的范围)或 $rootScope。
请注意,具有独立作用域的指令不会继承 "parent" div 的属性。
您只能在 app.run() 块中做一件事,将值应用于可跨应用程序访问的 $rootScope。
app.run(function($rootScope) {
// you can inject any instance here
$rootScope.IMAGEROOT='http://some-img.s3-website-ap-southeast-1.amazonaws.com/';
});
Ps:-但是更喜欢的方法是使用常量并将它们注入控制器,正如您在问题中已经说过的那样。
而且你只能在 运行 块中使用它,因为配置块不会为你提供使用 $rootScope 的服务。
在coffeescript中,我定义了一个常量对象:
angular
.module 'main',
[]
.constant 'CONFIG',
IMAGEROOT: 'http://some-img.s3-website-ap-southeast-1.amazonaws.com/'
在html中,我使用这样的常量:
<img ng-src="{{CONFIG.IMAGEROOT}}assets/img/
可以这样做:
.controller 'HomeCtrl', ($scope, CONFIG) ->
$scope.CONFIG=CONFIG
虽然这很好用,但每个控制器都需要以 $scope.CONFIG=CONFIG
开头,这看起来很笨拙。有没有办法使常量成为全局常量(任何 $scope 都可以访问)?
添加一个最外层控制器(父作用域)来存储这个常量是正确的方法吗?
您可以将 CONFIG 添加到 "parent" 范围(外部元素的范围)或 $rootScope。
请注意,具有独立作用域的指令不会继承 "parent" div 的属性。
您只能在 app.run() 块中做一件事,将值应用于可跨应用程序访问的 $rootScope。
app.run(function($rootScope) {
// you can inject any instance here
$rootScope.IMAGEROOT='http://some-img.s3-website-ap-southeast-1.amazonaws.com/';
});
Ps:-但是更喜欢的方法是使用常量并将它们注入控制器,正如您在问题中已经说过的那样。 而且你只能在 运行 块中使用它,因为配置块不会为你提供使用 $rootScope 的服务。