我懒加载模块。更改指向它的路由时,将重新加载整个应用程序,并再次调用app.component ngOnInit()函数(这是不受欢迎的,因为我订阅了服务器,只需要执行一次)。我发现在不刷新整个应用程序的情况下加载模块称为“热模块重新加载”(HMR),并且有一些软件包应对此有所帮助,但是我希望这可以由Angular本身来处理。仅在延迟加载的模块中会发生此问题。
app.component.html
<div>
<router-outlet></router-outlet>
</div>
app.component.ts
ngOnInit(): void {
console.log('App init');
this.realtimeService.subscripbeToRT(); // Should be called only once
}
app.module.ts
const routes: Routes = [
{ path: '', component: HomeComponent },
{
path: 'test',
loadChildren: () => import('./test/test.module').then(m => m.TestModule)
},
{ path: '**', redirectTo: '' }
];
@NgModule({
declarations: [
...
],
imports: [
RouterModule.forRoot(routes),
...
],
bootstrap: [AppComponent]
})
export class AppModule { }
在上面的示例中,在到/ test页面的路由更改中调用了实时服务。有人在加载惰性模块时知道如何禁用整个应用程序刷新吗?
谢谢
答案 0 :(得分:0)
您可以在此共享share子/堆栈闪电吗?您描述的情况很不正常。
在开发模式下需要HMR 。它不在生产中使用。
答案 1 :(得分:0)
最后,问题是在某些锚标记上使用了href而不是routerLinks。现在,该应用程序的行为与预期的一样。
答案 2 :(得分:0)
我遇到了同样的问题,因为我在我的顶栏中而不是使用 click=goto(/blah) 而在 ts 文件中执行 this.router.navigate(url) 解决了这个问题