我可以在Angular中使用全局常量而无需注入控制器吗?

时间:2015-03-10 04:59:34

标签: javascript angularjs coffeescript

在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)?

添加最外层控制器(父作用域)的正确方法是存储此常量吗?

2 个答案:

答案 0 :(得分:1)

您可以将CONFIG添加到“父”范围(外部元素的范围)或$rootScope

注意,具有隔离范围的指令不会从“父”div继承属性。

答案 1 :(得分:1)

您只能在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: - 但更喜欢的方法是使用常量并将它们注入控制器,就像你在问题中所说的那样。 而且你只能在run block中使用它,因为config block不会让你使用$ rootScope的服务。