在 Angular 8+(和 Ivy-ready?)中以编程方式加载模块

Programmatic loading of modules in Angular 8+ (and Ivy-ready?)

我的应用程序需要加载一组动态配置的功能模块(每个模块都有自己的附加路由),这些模块由配置文件(使用 XHR 加载)单独定义。 我最初的计划是有一个模块字符串列表(如 "plugins/my.module#MyModule")并在引导时使用 NgModuleFactoryLoader.load() 加载它们。

现在,当我开始实施时,我看到 NgModuleFactoryLoader 已被弃用,取而代之的是 LoadChildrenimport() 形式,这在这种情况下不起作用(我只有配置中的字符串,没有模块引用)。

我如何在当前 (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