服务生命周期(销毁服务)

时间:2018-11-09 08:55:31

标签: angular angular-router angular-module

我的应用程序具有以下架构: enter image description here

用户登录后,我导航到 MainModule (惰性),在其中注册 MainModule 组件中使用的服务。 CarService 缓存Web服务的结果,因此,如果用户注销,则需要销毁该服务。 当用户注销时,我导航至 LoginModolue

我认为导航到 LoginModule MainModule 会被销毁(实际上,我将其注册在 MainModule 中,而不是在AppModule),但我注意到,如果我再次登录,旧的缓存仍然存在。 这正常吗? 当我导航到 LoginModule 时,是否应该销毁 MainModule 中提供的服务?

2 个答案:

答案 0 :(得分:3)

不幸的是,由于延迟模块的性质,您会希望这种情况发生,这不是发生的情况,请读here为什么不行。基本上,延迟加载的模块保留在内存中。

但是,您可以将提供者放在主组件视图中:

@NgModule({
  declarations: [
     MainComponent
  ]
})
export class MainModule {}

@Component({
  //...
  providers: [ CarService ]
})
export class MainComponent {}

这将在CarService被销毁时销毁MainComponent实例

答案 1 :(得分:1)

事实并非如此。转移到其他模块并不意味着先前的延迟加载模块将被销毁。它仍然会保留。这就是为什么当我们尝试再次导航到该模块时,Angular不要求提供该懒加载模块的块的原因。

该服务也将保留在内存中。仅当用户手动重新加载应用程序时,服务才会重新初始化。

在将用户导航到/login路由之前,您必须手动清除缓存。进行此操作的理想位置可能是您要离开的组件的ngOnDestroy