угловые несколько приложений, построенных с клиентскими компонентами - PullRequest
0 голосов
/ 10 декабря 2018

Давайте представим, что у нас есть приложение и несколько клиентов, которые его используют.И у нас есть часть приложения, которая является общей для всех, но в некоторых угловых модулях (ленивых модулях) для разных клиентов мы хотим иметь разную логику и поведение представления для некоторых компонентов.

Например,у нас есть следующий лениво загруженный модуль:

{
    path: 'feature1',
    loadChildren: './feature1/feature1.module#Feature1Module',
}

Определение модуля:

@NgModule({
    imports: [
       ...
    ],
    declarations: [
        FeatureComponent1,
        FeatureComponent2,
        FeatureComponent3,
    ],
})
export class Feature1Module {}

В FeatureComponent1 мы используем FeatureComponent2 и FeatureComponent3.

Авот вам главный вопрос : как мы можем переопределить функциональность вложенных компонентов и их представление без переопределения целой цепочки определений (объявление модуля и его компонентов).

В случае этой проблемы нам определенно нужноиндивидуальная сборка для каждого клиента.И эта проблема решается с помощью angular-cli с определением «приложений» столько, сколько нам нужно.

angular.json

"projects": {
  "client1": {...},
  "client2": {...},
}

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

--core
--shared
--clients
    --client1
      client1-app.component.ts
      client1-app.module.ts
      --feature1
        feature1.module.ts
        feature-component2.ts
        feature-component3.ts

    @NgModule({
        imports: [
// import feature from shared module
            CommonFeature1Module,
        ],
        declarations: [
// define client specific components that inherits from core components 
            FeatureComponent2, 
            FeatureComponent3,
        ],
    })
    export class Client1Feature1Module {}

Есть ли способ избежать такогоосложнения?

Может быть, я что-то упустил?

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

У меня также есть некоторые мысли о ComponentFactoryResolver, который может помочь с динамической реализацией компонентов, которые я хочу, нов этом случае мне нужно будет передать дополнительных провайдеров в свой функциональный модуль с токенами, которые содержат определение класса пользовательского компонента, а также путаются с компонентами ввода.

Благодарим за любую помощь.

...