我可以在不注入控制器的情况下在 Angular 中使用全局常量吗?

Can I use a global constant in Angular without injection into controller?

本文关键字:全局 常量 Angular 注入 控制器 情况下 我可以      更新时间:2023-09-26

在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 添加到"父"范围(外部元素的作用域)或$rootScope。

请注意,具有独立作用域的指令不会从"父"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的服务。