Angular 以角度8+编程加载模块;(常春藤准备好了吗?)

Angular 以角度8+编程加载模块;(常春藤准备好了吗?),angular,routing,lazy-loading,angular-ivy,Angular,Routing,Lazy Loading,Angular Ivy,我的应用程序需要加载一组动态配置的功能模块(每个模块都有自己的额外路由),这些模块由配置文件(用XHR加载)单独定义。 我最初的计划是创建一个模块字符串列表(如“plugins/My.module#MyModule”),并在引导时使用NgModuleFactoryLoader.load()加载它们 现在,当我开始实现时,我看到NgModuleFactoryLoader被弃用,取而代之的是import()形式的LoadChildren,它在这个上下文中不起作用(我在配置中只有字符串,没有模块引用)

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

现在,当我开始实现时,我看到
NgModuleFactoryLoader
被弃用,取而代之的是
import()
形式的
LoadChildren
,它在这个上下文中不起作用(我在配置中只有字符串,没有模块引用)


如何在当前(8+)Angular中实现这一点?

通过导入实现LazyLoading的新表单如下所示

  {
    path: '',
    loadChildren: () =>
      import('./dashboard/dashboard.module').then(
        mod => mod.DashboardModule
      )
  }

您必须导入带有路径的模块文件,然后选择模块实现

这是一个相当大的主题,但是如果使用Ivy编译器,
NgModuleFactoryLoader
将不再工作。因为不再有模块工厂,只有模块类上的注入器定义

有一个全新的常春藤API,它的大小不适合这个答案


正如你在评论中要求我留下一个答案,这样下一个研究者会发现它更容易。这是文章的链接。如果媒体链接消失了,它也可以在上使用。

这是如何以编程方式工作的,比如
plugins.forEach(p=>import(p)。然后(…)
?据我所知,
import()
是由angular编译器神奇地获取的…@overthesanity-Holy-crap!这和我要找的东西一模一样。:-)你可以在下面写一个完整的答案,让下一个研究者找到更好的答案(我可以接受你应得的分数:-)哈哈,丹克,如你所愿!:D