角延迟加载模块重新加载应用程序

问题描述

我懒加载模块。更改指向它的路由时,将重新加载整个应用程序,并再次调用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页面的路由更改中调用了实时服务。有人在加载惰性模块时知道如何禁用整个应用程序刷新吗?

谢谢

解决方法

您可以在此共享share子/堆栈闪电吗?您描述的情况很不正常。

在开发模式下需要HMR 。它不在生产中使用。

,

最后,问题是在某些锚标记上使用了href而不是routerLinks。现在,该应用程序的行为与预期的一样。

,

我遇到了同样的问题,因为我在我的顶栏中而不是使用 click=goto(/blah) 而在 ts 文件中执行 this.router.navigate(url) 解决了这个问题