2

Я хотел бы определить константу, которая использует сервис $locale. Константы - это объекты, поэтому я не могу вводить их как параметр, как в случае контроллера. Как я могу использовать его?Как проинформировать сервис к угловой константе

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

ответ

2

Вы можете вручную захватить $locale с $injector. Обратите внимание на следующее ...

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

JSFiddle Example

+0

Я не уверен, что это хороший идеальный вызов углового.инжектора внутри кода модуля. Типичное использование - сотрудничество с библиотеками третьей части. Я думаю, что это угловые службы, работающие в режиме реального времени. – milanlempera

+0

Кажется прекрасным для меня. Можете ли вы дать определенную причину, почему это не будет хорошей идеей? Не согласен с нижним листом, OP удовлетворен ответом – scniro

+0

Вопрос: «Как проинформировать сервис к угловой константе» и вообще, ответ в этом случае. В случае специального использования (здесь предлагается услуга от модуля ng), это возможно, но, я думаю, ваши решения идут вразрез с целью DI. DI говорит о ваших зависимостях, и здесь вы загружаете значение из глобальной зависимости. (docs говорит, что инъекция предназначена для «доступа к инжектору извне Углового» ). Кроме того, угловые константы (по определению) не могут иметь зависимости. Они формируются на другом этапе жизненного цикла (см. Ссылку на сообщение и документацию). Поэтому я считаю, что ваш ответ не очень хорош. – milanlempera

3

это невозможно по двум причинам.

  1. константа не может иметь зависимости (см таблицу донные https://docs.angularjs.org/guide/providers)

  2. константы и поставщика доступны в функциях .config (конфигурации фазы), но услуги ($ локали) доступны только позже (в. функция запуска/фаза)

В качестве альтернативы вы можете создать сервис типа завод, который может иметь зависимости и может создать объект или примитивный

angular.module('app') 
    .factory('LOCALE_ID', function($locale) { 
     return {'LOCALE': $locale.id.slice(0, 2)} 
    }) 
Смежные вопросы