Глобальная инъекция сервиса Angular

Есть ли способ получить доступ к полю службы без внедрения службы в каждый компонент? или, что то же самое: существует ли какая-то концепция «глобального» сервиса в Angular 6?

Мой вариант использования выглядит следующим образом: текстовые метки для полей извлекаются при запуске приложения службой под названием ConfigurationManagementService. Эта служба имеет наблюдаемое поле CurrentApplicationContext$, которое имеет поле объекта ApplicationConfiguration, которое имеет поле объекта Label. (это связано с тем, как настроен бэкэнд).

Теперь: чтобы использовать метки в представлении компонента, я должен внедрить ConfigurationManagementService (здесь как ConfigurationManagement) в каждый компонент, а затем подписаться на него (к счастью, я могу использовать метод прямого асинхронного канала), например:

<button mat-raised-button color="primary">
<mat-icon">add_shopping_cart</mat-icon> 
{{ (ConfigurationManagement.CurrentApplicationContext$ | async)?.ApplicationConfiguration?.Label['Buy'] }}
</button>

Мой вопрос: есть ли другой более короткий способ сделать это? Потому что это очень трудоемкая и утомительная задача, если вы выполняете ее, как указано, для каждого компонента и каждого текстового поля в приложении.

Спасибо!


person t_T_t    schedule 04.12.2018    source источник


Ответы (1)


Передайте данные в локальное хранилище, например localStorage.setItem('itemName',value), или установите его как файл cookie и получите доступ к ним в конструкторе компонентов и извлеките данные из локального хранилища/файла cookie, тогда не нужно подписываться и внедрять зависимости. Но вы должны получить все данные при загрузке приложения.

person umesh99    schedule 04.12.2018