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

Angular 服务生命周期(销毁服务),angular,angular-router,angular-module,Angular,Angular Router,Angular Module,我的应用程序具有如下体系结构: 用户登录后,我导航到MainModule(lazy),在那里注册MainModule组件中使用的服务。 CarService缓存Web服务的结果,因此,如果用户注销,我需要销毁此服务。 当用户注销时,我导航到LoginModolue 我以为导航到LoginModule,MainModule会被销毁(事实上,我在MainModule中注册了它,而不是在AppModule中),但我注意到,如果我再次登录,旧缓存仍然存在。 这正常吗? 当我导航到LoginModule

我的应用程序具有如下体系结构:

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

我以为导航到LoginModuleMainModule会被销毁(事实上,我在MainModule中注册了它,而不是在AppModule中),但我注意到,如果我再次登录,旧缓存仍然存在。 这正常吗?
当我导航到LoginModule时,不应该破坏main模块中提供的服务吗?

事实并非如此。移动到其他模块并不意味着之前延迟加载的模块将被销毁。它仍将继续存在。这就是为什么Angular在尝试再次导航到该模块时不请求该延迟加载模块的块

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


在将用户导航到
/login
路径之前,您必须手动清理缓存。执行此操作的理想位置可以是您正在导航的组件的
ngondestory

您可能会期望发生这种情况,不幸的是,由于惰性模块的性质,这不是发生的情况,请阅读“为什么不”。基本上,延迟加载的模块保留在内存中

但是,您可以将提供程序放在主组件视图上:

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

@Component({
  //...
  providers: [ CarService ]
})
export class MainComponent {}
main组件被销毁时,这将销毁
CarService
实例