совместное использование одной услуги через несколько угловых 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

По определению, сервисы являются одноточечными, поэтому, если вам нужна услуга, которая будет использоваться в нескольких приложениях внутри проекта, все, что вам действительно нужно сделать, это определить ее в корне вашего проекта и импортировать в каждом приложении. Что здесь немного неортодоксально, так это идея использования нескольких приложений. Возможно, вам действительно нужно одно приложение с таким количеством модулей, сколько требуется вашему решению. Но опять же, не глядя на вашу архитектуру, я не могу ничего сказать с хорошей точностью, поэтому, если вы хотите поделиться своим кодом, возможно, я могу взглянуть на него и сделать предложение.

Ура!