用户登录后,我导航到 MainModule (惰性),在其中注册 MainModule 组件中使用的服务。 CarService 缓存Web服务的结果,因此,如果用户注销,则需要销毁该服务。 当用户注销时,我导航至 LoginModolue 。
我认为导航到 LoginModule , MainModule 会被销毁(实际上,我将其注册在 MainModule 中,而不是在AppModule),但我注意到,如果我再次登录,旧的缓存仍然存在。 这正常吗? 当我导航到 LoginModule 时,是否应该销毁 MainModule 中提供的服务?
答案 0 :(得分:3)
不幸的是,由于延迟模块的性质,您会希望这种情况发生,这不是发生的情况,请读here为什么不行。基本上,延迟加载的模块保留在内存中。
但是,您可以将提供者放在主组件视图中:
@NgModule({
declarations: [
MainComponent
]
})
export class MainModule {}
@Component({
//...
providers: [ CarService ]
})
export class MainComponent {}
这将在CarService
被销毁时销毁MainComponent
实例
答案 1 :(得分:1)
事实并非如此。转移到其他模块并不意味着先前的延迟加载模块将被销毁。它仍然会保留。这就是为什么当我们尝试再次导航到该模块时,Angular不要求提供该懒加载模块的块的原因。
该服务也将保留在内存中。仅当用户手动重新加载应用程序时,服务才会重新初始化。
在将用户导航到/login
路由之前,您必须手动清除缓存。进行此操作的理想位置可能是您要离开的组件的ngOnDestroy
。