Angular decorators中模块/组件的动态加载

Angular decorators中模块/组件的动态加载,angular,Angular,我正在建立客户关系管理系统。 我的一些客户希望个性化他们的版本,因此根据子域的不同,我希望为路由模块加载不同的组件和模块 大概是这样的: const routes:routes=[ { 路径:“”, 组件:PageAuthContainerComponent, 儿童:[ { 路径:“登录”, //如果子域需要,获取自定义组件 组件:SubdomainsLoader.loadComponent('PageAuthLogowanieComponent')| | PageAuthLogowanieCo

我正在建立客户关系管理系统。 我的一些客户希望个性化他们的版本,因此根据子域的不同,我希望为路由模块加载不同的组件和模块

大概是这样的:

const routes:routes=[
{
路径:“”,
组件:PageAuthContainerComponent,
儿童:[
{
路径:“登录”,
//如果子域需要,获取自定义组件
组件:SubdomainsLoader.loadComponent('PageAuthLogowanieComponent')| | PageAuthLogowanieComponent,
},
{路径:'',重定向到:'login',路径匹配:'full'},
],
},
];
@NGD模块({
进口:[
公共模块,
用于儿童的路由模块(路由),
//获取子域的其他模块
…SubdomainsLoader.loadModules('AuthPagesRoutingModule'),
],
声明:[],
出口:[]
})
导出类AuthPagesRoutingModule{
}
它在开发中起作用,但问题在于
AOT
。我不能在装饰器中使用函数。 有没有办法处理这类案件?
或者,唯一的解决方案可能是使用
生产
而不使用
aot
,然后等待
Ivy
,希望它能解决问题?

Angular提供了模块的延迟加载。因此,您可以维护两个版本模块
Version1Module
Version2Module
,依此类推。根据路径,您可以加载任一模块。因此,您不需要考虑模块的动态加载,而是需要考虑它

参考:

版本1模块

const routes:routes=[
{
路径:“”,
儿童:[
{
路径:“登录”,
组件:PageAuthContainerComponent,
},
{路径:'',重定向到:'login',路径匹配:'full'},
],
},
];
@NGD模块({
进口:[
公共模块,
用于儿童的路由模块(路由),
],
声明:[],
出口:[]
})
导出类版本1模块{}
版本2模块

const routes:routes=[
{
路径:“”,
儿童:[
{
路径:“登录”,
组件:PageAuthContainerComponent1,//或可以是与版本1相同的组件
},
{路径:'',重定向到:'login',路径匹配:'full'},
],
},
];
@NGD模块({
进口:[
公共模块,
用于儿童的路由模块(路由),
],
声明:[],
出口:[]
})
导出类版本2模块{}
AppModule(主模块)

const versionToLoad=(window.location.hostname | |?“”)。包括('v1subdomain')?'/apps/v1/version1.module#version1模块':'。/apps/v2/version2.module#version2模块';
常数路由:路由=[
{
路径:“应用程序”,
loadChildren:versionToLoad
}
];
@NGD模块({
进口:[
公共模块,
路由模块forRoot(路由),
],
声明:[],
出口:[]
})
导出类AppModule{}

Ok-用户进入
app/v1
页面,加载
Version1Module
(这是第一个)。我怎么能依赖于
子域
?这对我来说不是一个好的解决方案。我将不得不更改我的
路由链接
,我甚至不知道哪些路由将被更改(不知道未来客户的要求)。我想这可能会通过更新答案解决您的问题。它不起作用-即使没有aot,angular也看不到新模块。我做了一些测试,我认为原因是angular编译器找不到延迟加载的模块,因此不在捆绑包中。在将
lazyModules
添加到
angular.json
()后,它可以工作,但必须使用完整路径(从
src/app
开始)。谢谢,很难,这更简单。