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

时间:2020-09-10 07:13:09

标签: angular lazy-loading angular-routing

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

谢谢

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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