我已经尝试加载没有使用路由器的模块SystemJsNgModuleLoader,但无法使其工作:
this.loader.load(url).then(console.info);
Run Code Online (Sandbox Code Playgroud)
我正在Cannot find module xxx使用我用于URL的任何字符串(aboslute/relative urls/paths ...尝试了很多选项).我浏览了一下路由器源代码,然后找不到其他任何东西SystemJsNgModuleLoader.我甚至不确定我应该使用这个......
昨天在ng-europe 2016会议上就提出了这个问题--Miško和Matias回答说:
MiškoHevery: 只需要掌握模块,就可以从那里获得组件工厂,您可以在应用程序中的任何位置动态加载组件工厂.这正是路由器内部所做的事情.因此,你也可以做到这一点.
MatiasNiemelä 唯一值得注意的是,在[Ng]模块上有一些被调用的东西
entryComponents,它可以识别可以延迟加载的组件 - 这是该组件集的入口.所以当你有懒惰加载的模块时,请把东西放进去entryComponents.
......但是,如果没有关于这个问题的例子和糟糕的文档,那就不是那么紧张的前进了;
任何人都知道如何手动加载模块,而不使用Route.loadChildren?如何掌握模块以及应该进入的内容究竟是什么entryComponents(我阅读常见问题解答,但不能在没有实际加载模块的情况下尝试)?
我想在我的应用程序中有一条路线,我可以在其中列出应用程序中的所有现有路线。我在 Angular 9 中使用 Ivy 并使用动态导入进行延迟加载。
该应用程序有一些延迟加载的模块。该路由将在根模块中声明。但是此时router.config只包含“根”路由,而懒惰的路由有一个 loadChildren()` 方法,可以动态导入模块。
我尝试过这样的事情:角度 8 中的延迟加载模块,但无法使其适用于路线。路由器实例似乎没有更新。
查看路由器的源代码,我已经成功加载了lazy模块并使用configLoader的load方法获取了子路由
(<any> this.router).configLoader.load(this.injector, route).subscribe({
next: (moduleConf) => {
children.push(...moduleConf.routes.map((childRoute) => childRoute.path));
}
})
Run Code Online (Sandbox Code Playgroud)
它运行良好,但我使用了 的configLoader属性,Router它是一个私有属性。所以这对未来来说不是一个好主意:)
我制作了一个堆栈闪电战,您可以在其中查看/测试代码。该组件还有一个loadConfOld()方法,该方法尝试使用moduleFactory.
我怎样才能以适当和持久的方式做我想做的事?预先感谢您的帮助。