假设我们有一个应用程序和几个使用它的客户端。 而且,我们的应用程序的一部分对所有人都是通用的,但是在针对不同客户端的某些角度模块(惰性模块)中,我们希望具有不同的逻辑并查看某些组件的行为。
例如,我们有以下延迟加载的模块:
{
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也有一些想法,可以帮助动态实例化所需的组件,但是在这种情况下,我将需要使用带有自定义组件类定义的令牌将其他提供程序传递给我的功能模块,并且还要弄乱条目组件。
感谢任何帮助。