如何将服务注入角度常数

cie*_*bor 5 javascript dependency-injection constants angularjs angularjs-service

我想定义一个使用$locale服务的常量.常量是对象,因此我不能将其作为参数注入,就像控制器一样.我怎么用呢?

angular.module('app').constant('SOME_CONSTANT', {
  'LOCALE': $locale.id.slice(0, 2)
})
Run Code Online (Sandbox Code Playgroud)

mil*_*era 8

这有两个原因是不可能的.

  1. 常量不能有依赖关系(参见表格底部https://docs.angularjs.org/guide/providers)

  2. 常量和提供程序在.config函数(配置阶段)中可用,但服务($ locale)仅在稍后可用(在.run函数/阶段)

或者,您可以创建服务类型工厂,它可以具有依赖关系并可以创建对象或基元

angular.module('app')
  .factory('LOCALE_ID', function($locale) {
      return {'LOCALE': $locale.id.slice(0, 2)}
  })
Run Code Online (Sandbox Code Playgroud)


scn*_*iro 6

您可以$locale使用$injector手动抓取。观察以下...

app.constant('SOME_CONSTANT', { 
    'LOCALE': angular.injector(['ng']).get('$locale').id.slice(0, 2) 
});
Run Code Online (Sandbox Code Playgroud)

JSFiddle 示例

  • `angular.injector` 状态 - [“创建一个可用于检索服务和依赖注入的注入器对象”](https://docs.angularjs.org/api/ng/function/angular.injector)。我们正在检索`$locale` 服务。这是完全有效的。 (2认同)