Давайте представим, что у нас есть приложение и несколько клиентов, которые его используют.И у нас есть часть приложения, которая является общей для всех, но в некоторых угловых модулях (ленивых модулях) для разных клиентов мы хотим иметь разную логику и поведение представления для некоторых компонентов.
Например,у нас есть следующий лениво загруженный модуль:
{
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, который может помочь с динамической реализацией компонентов, которые я хочу, нов этом случае мне нужно будет передать дополнительных провайдеров в свой функциональный модуль с токенами, которые содержат определение класса пользовательского компонента, а также путаются с компонентами ввода.
Благодарим за любую помощь.