How to inject service to angular constant

ciembor picture ciembor · Jul 15, 2015 · Viewed 10.6k times · Source

I would like to define a constant which use $locale service. Constants are objects, so I can't inject it as parameter as in case of controller. How can I use it?

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

Answer

milanlempera picture milanlempera · Jul 15, 2015

this is not possible for two reasons.

  1. constant can not have dependencies (see table bottom https://docs.angularjs.org/guide/providers)

  2. constants and provider are available in .config functions (config phase), but services ($locale) are available only later (in .run function/phase)

Alternatively you can create service-type factory, which can have dependencies and can create object or primitive

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