【问题标题】:Can I use a global constant in Angular without injection into controller?我可以在 Angular 中使用全局常量而不注入控制器吗?
【发布时间】:2015-03-10 13:14:46
【问题描述】:

在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 都可以访问)?

添加一个最外层控制器(父作用域)来存储这个常量是否正确?

【问题讨论】:

    标签: javascript angularjs coffeescript


    【解决方案1】:

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

    注意,具有独立作用域的指令不会从“父”div 继承属性。

    【讨论】:

      【解决方案2】:

      您只能在 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 的服务。

      【讨论】:

        猜你喜欢
        • 2020-07-17
        • 1970-01-01
        • 2011-05-09
        • 1970-01-01
        • 1970-01-01
        • 2019-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多