为每个路由重新初始化应用模块



我有一个 Angular 9 应用程序,我注意到每次我从一条路线导航到另一条路线时,我的服务都会重新初始化/重新实例化。经过长时间的调试和试验,我决定登录AppModule的构造函数,并注意到它被召回了每条路由。 注意:我使用 provisionIn: 'root' 注入我的服务。我也尝试在 AppModule 提供程序属性中声明服务,而不是使用 provideIn,但结果仍然相同。

有什么想法吗?

这是我的应用模块:

@NgModule({
declarations: [
AppComponent,
...
],
imports: [
BrowserModule,
StoreModule.forRoot({user : userReducer}),
AppRoutingModule,
BrowserAnimationsModule,
FormsModule,
AngularFireModule.initializeApp(environment.firebase),
AngularFirestoreModule,
AngularFireStorageModule,
ReactiveFormsModule,
MatAutocompleteModule,
NgbModule.forRoot(),
FontAwesomeModule,
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { 
constructor(){
console.log('MODULE INIT');
}
}

这是我的路由模块:

@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }

您描述的行为让我认为您的应用程序每次导航时都会重新加载自己的新状态。在以下情况下可能会发生这种情况:

  • 要求浏览器从头开始访问 URL(如在另一个选项卡中或按 Ctrl+R(。
  • 要求应用的本机 DOM 在新上下文中路由用户(例如使用本机href属性时(。

无论如何,您的代码似乎是正确的,并且您似乎已经考虑了使用单例服务的后果,因此问题很可能不是来自提供麻烦的服务。

相关内容

最新更新