立刻有
全部
技术
PHP
MySQL
前端
Linux
JAVA
退出
编辑文章
选择分类
PHP
MySQL
前端
Linux
Java
工具
选择专栏
设计模式
java基础
Angular学习
Java面试题
描述:
Lazy loaded modules should use RouterModule.forChild() instead.
封面图上传 :
+
点击上传图片
#### 问题 Angular 运行报错 RouterModule.forRoot() called twice. Lazy loaded modules should use RouterModule.forChild() instead. #### 具体报错 ```js core.js:5847 ERROR Error: Uncaught (in promise): Error: RouterModule.forRoot() called twice. Lazy loaded modules should use RouterModule.forChild() instead. Error: RouterModule.forRoot() called twice. Lazy loaded modules should use RouterModule.forChild() instead. at provideForRootGuard (router.js:5561) at _callFactory (core.js:18524) at _createProviderInstance (core.js:18480) at initNgModule (core.js:18410) at new NgModuleRef_ (core.js:19137) at createNgModuleRef (core.js:19126) at Object.debugCreateNgModuleRef [as createNgModuleRef] (core.js:27949) at NgModuleFactory_.push../node_modules/@angular/core/fesm5/core.js.NgModuleFactory_.create (core.js:28653) at MapSubscriber.project (router.js:3602) at MapSubscriber.push../node_modules/rxjs/_esm5/internal/operators/map.js.MapSubscriber._next (map.js:35) at resolvePromise (zone.js:852) at resolvePromise (zone.js:809) at zone.js:913 at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:423) at Object.onInvokeTask (core.js:24340) at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:422) at Zone.push../node_modules/zone.js/dist/zone.js.Zone.runTask (zone.js:195) at drainMicroTaskQueue (zone.js:601) ``` #### 出现原因 我给我的网站新增加一个继承AfterViewInit的component --------- - 小知识:关于angular的AfterViewInit 一个生命周期钩子,会在 Angular 完全初始化了组件的视图后调用。 定义一个 ngAfterViewInit() 方法来处理一些额外的初始化任务。 --------- #### 分析 看报错主要是说 RouterModule.forRoot()被调用两次。延迟加载的模块应该使用RouterModule.forChild()。意思就是我在哪个延迟加载的模块可能再次调用了RouterModule.forRoot(),其实本应该调用RouterModule.forChild(),那可能就是我在包含通过RouterModule.forChild()加载路由的模块里面加载了新增加的component导致出现这个问题,分析了一般发现没结果,于是把新增的component全删除了,结果还是报错,what????快奔溃,于是准备看下git的代码修改记录,**发现啥时候不小心在我的一个子模块里面导入了AppModule,这导致在加载子模块时再次调用根AppRoutingModule,因此两次调用RouterModule.forRoot()**终于真相大白,我也很奔溃,找了很久 #### 结论 要细心
保存文章