Angular 服务生命周期(销毁服务)
我的应用程序具有如下体系结构: 用户登录后,我导航到MainModule(lazy),在那里注册MainModule组件中使用的服务。 CarService缓存Web服务的结果,因此,如果用户注销,我需要销毁此服务。 当用户注销时,我导航到LoginModolue 我以为导航到LoginModule,MainModule会被销毁(事实上,我在MainModule中注册了它,而不是在AppModule中),但我注意到,如果我再次登录,旧缓存仍然存在。 这正常吗?Angular 服务生命周期(销毁服务),angular,angular-router,angular-module,Angular,Angular Router,Angular Module,我的应用程序具有如下体系结构: 用户登录后,我导航到MainModule(lazy),在那里注册MainModule组件中使用的服务。 CarService缓存Web服务的结果,因此,如果用户注销,我需要销毁此服务。 当用户注销时,我导航到LoginModolue 我以为导航到LoginModule,MainModule会被销毁(事实上,我在MainModule中注册了它,而不是在AppModule中),但我注意到,如果我再次登录,旧缓存仍然存在。 这正常吗? 当我导航到LoginModule
当我导航到LoginModule时,不应该破坏main模块中提供的服务吗?事实并非如此。移动到其他模块并不意味着之前延迟加载的模块将被销毁。它仍将继续存在。这就是为什么Angular在尝试再次导航到该模块时不请求该延迟加载模块的块 该服务也将保留在内存中。只有当用户手动重新加载应用程序时,服务才会重新初始化
在将用户导航到
/login
路径之前,您必须手动清理缓存。执行此操作的理想位置可以是您正在导航的组件的ngondestory
。您可能会期望发生这种情况,不幸的是,由于惰性模块的性质,这不是发生的情况,请阅读“为什么不”。基本上,延迟加载的模块保留在内存中
但是,您可以将提供程序放在主组件视图上:
@NgModule({
declarations: [
MainComponent
]
})
export class MainModule {}
@Component({
//...
providers: [ CarService ]
})
export class MainComponent {}
当main组件被销毁时,这将销毁CarService
实例