在 Angular 8+(和 Ivy-ready?)中以编程方式加载模块
Programmatic loading of modules in Angular 8+ (and Ivy-ready?)
我的应用程序需要加载一组动态配置的功能模块(每个模块都有自己的附加路由),这些模块由配置文件(使用 XHR 加载)单独定义。
我最初的计划是有一个模块字符串列表(如 "plugins/my.module#MyModule")并在引导时使用 NgModuleFactoryLoader.load()
加载它们。
现在,当我开始实施时,我看到 NgModuleFactoryLoader
已被弃用,取而代之的是 LoadChildren
的 import()
形式,这在这种情况下不起作用(我只有配置中的字符串,没有模块引用)。
我如何在当前 (8+) Angular 中实现它?
使用 import 实现 LazyLoading 的新形式是这样的
{
path: '',
loadChildren: () =>
import('./dashboard/dashboard.module').then(
mod => mod.DashboardModule
)
}
您必须使用路径导入模块文件,然后select模块实现
这是一个很大的话题,但是如果您使用的是 Ivy 编译器,NgModuleFactoryLoader
将不再起作用。因为不再有模块工厂,只有模块 类.
上的注入器定义
有全新的 Ivy API,它的大小不适合这个答案。
正如您在评论中要求我留下答案那样,下一位研究人员会发现它更容易。如果中型 link 消失了,那就是 link 到 Asynchronous Modules and Components in Angular Ivy article. It's also available on the indepth.dev。
我的应用程序需要加载一组动态配置的功能模块(每个模块都有自己的附加路由),这些模块由配置文件(使用 XHR 加载)单独定义。
我最初的计划是有一个模块字符串列表(如 "plugins/my.module#MyModule")并在引导时使用 NgModuleFactoryLoader.load()
加载它们。
现在,当我开始实施时,我看到 NgModuleFactoryLoader
已被弃用,取而代之的是 LoadChildren
的 import()
形式,这在这种情况下不起作用(我只有配置中的字符串,没有模块引用)。
我如何在当前 (8+) Angular 中实现它?
使用 import 实现 LazyLoading 的新形式是这样的
{
path: '',
loadChildren: () =>
import('./dashboard/dashboard.module').then(
mod => mod.DashboardModule
)
}
您必须使用路径导入模块文件,然后select模块实现
这是一个很大的话题,但是如果您使用的是 Ivy 编译器,NgModuleFactoryLoader
将不再起作用。因为不再有模块工厂,只有模块 类.
有全新的 Ivy API,它的大小不适合这个答案。
正如您在评论中要求我留下答案那样,下一位研究人员会发现它更容易。如果中型 link 消失了,那就是 link 到 Asynchronous Modules and Components in Angular Ivy article. It's also available on the indepth.dev。