совместное использование одной услуги через несколько угловых 5 приложений
Я запускаю несколько небольших угловых 5 приложений в виде виджетов внутри моего приложения backbase. Теперь я пытаюсь написать глобальную службу, которая находится на уровне окна, и делиться всеми приложениями.
В настоящее время я делаю статическую службу и использую в каждом виджетах и использую webpack для создания конкретного набора виджета. Здесь мне удалось добиться кэширования http с операторами rxjs.
Но я считаю, что это не может быть правильным способом его реализации. Есть ли лучший способ поделиться сервисом singleton в нескольких угловых 5 приложениях в одном проекте.
Ответы
Ответ 1
Технически один из ваших модулей ("основной" модуль) может экспортировать собственную услугу через объект window
, другие модули ("клиенты") могут внедрять обертку:
class ServiceWrapper implements IService
{
private readonly instance:IService;
constructor(){
this.instance = window['myService'] as IService;
}
public someMethod():void {
this.instance.someMethod();
}
}
Ответ 2
Раньше, если вы хотите поделиться чем-то между несколькими Угловыми проектами, которые были довольно сложными. Вам нужно будет выполнить одно из следующих действий:
- Создание пакета содержит общий код и публикацию его в частном или общедоступном реестре NPM.
- Создайте субмодуль GIT и укажите его на обоих ваших проектах
Но теперь я предполагаю, что поддержка библиотеки, представленная в Angular 6, наилучшим образом соответствует вашим потребностям.
Здесь есть простая статья:
Серия угловых библиотек - создание библиотеки с помощью Угловой CLI
Это похоже на публикацию вашего общего пакета для NPM, но Angular CLI (и ng-packagr) действительно сделали его очень простым.
Ответ 3
По определению, сервисы являются одноточечными, поэтому, если вам нужна услуга, которая будет использоваться в нескольких приложениях внутри проекта, все, что вам действительно нужно сделать, это определить ее в корне вашего проекта и импортировать в каждом приложении. Что здесь немного неортодоксально, так это идея использования нескольких приложений. Возможно, вам действительно нужно одно приложение с таким количеством модулей, сколько требуется вашему решению. Но опять же, не глядя на вашу архитектуру, я не могу ничего сказать с хорошей точностью, поэтому, если вы хотите поделиться своим кодом, возможно, я могу взглянуть на него и сделать предложение.
Ура!