我可以在 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 的服务。