Совместное использование одной услуги несколькими приложениями angular 5

Я запускаю несколько небольших угловых 5 приложений в качестве виджетов внутри моего приложения на базе. Сейчас я пытаюсь написать глобальный сервис, который находится на уровне окна, и делиться между всеми приложениями.

В настоящее время я делаю сервис статическим и использую его в каждом виджете, а также использую веб-пакет для создания определенного виджета. Здесь я смог добиться http-кэширования с помощью операторов rxjs.

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

3 ответа

Раньше, если вы хотите поделиться чем-то между несколькими проектами Angular, это было довольно сложно. Вам придется сделать одно из следующих действий:

  • Создайте пакет, содержащий общий код, и опубликуйте его в частном или публичном реестре NPM.
  • Создайте подмодуль GIT и сделайте ссылку на него в обоих ваших проектах

Но теперь я предполагаю, что поддержка библиотеки, представленная в Angular 6, лучше всего подойдет вашим потребностям.

Здесь есть простая вступительная статья:

Серия Angular Library - Создание библиотеки с помощью углового CLI

Это похоже на публикацию вашего общего пакета в NPM, но Angular CLI (и ng-packagr) действительно сделали его очень простым.

Технически один из ваших модулей ("основной" модуль) может экспортировать свой собственный сервис через window объект, другие модули ("клиенты") могут внедрить службу оболочки:

class ServiceWrapper implements IService
{
    private readonly instance:IService;

    constructor(){
        this.instance = window['myService'] as IService;
    }

    public someMethod():void {
         this.instance.someMethod();
    }
}

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

Ура!

Другие вопросы по тегам