服务生命周期(销毁服务)
Services lifecycle (destroy a service)
我的应用程序的架构如下:
用户登录后,我导航到 MainModule(懒惰),我在其中注册 MainModule 中使用的服务组件。
CarService 缓存 web 服务的结果,因此,如果用户注销,我需要销毁此服务。
当用户注销时,我导航到 LoginModolue.
我以为导航到 LoginModule,MainModule 会被销毁(实际上我在 MainModule,不在 AppModule 中)但我注意到,如果我再次登录,旧缓存仍然存在。
这是正常的吗?
当我导航到 LoginModule?
时,不应破坏 MainModule 中提供的服务
事实并非如此。移动到其他模块并不意味着之前的延迟加载模块将被销毁。它仍然会存在。这就是为什么当我们尝试再次导航到该模块时 Angular 不请求该延迟加载模块的块。
该服务也将保留在内存中。只有当用户手动重新加载应用程序时,服务才会重新初始化。
在将用户导航到 /login
路由之前,您必须手动清理缓存。执行此操作的理想位置可以是您导航离开的组件的 ngOnDestroy
。
你会预料到会发生这种情况,不幸的是,由于惰性模块的性质,这不会发生,阅读 here 为什么不呢。基本上延迟加载的模块留在内存中。
然而,您可以做的是将提供程序放在主组件视图中:
@NgModule({
declarations: [
MainComponent
]
})
export class MainModule {}
@Component({
//...
providers: [ CarService ]
})
export class MainComponent {}
这将在 MainComponent
被销毁时销毁 CarService
实例
我的应用程序的架构如下:
用户登录后,我导航到 MainModule(懒惰),我在其中注册 MainModule 中使用的服务组件。 CarService 缓存 web 服务的结果,因此,如果用户注销,我需要销毁此服务。 当用户注销时,我导航到 LoginModolue.
我以为导航到 LoginModule,MainModule 会被销毁(实际上我在 MainModule,不在 AppModule 中)但我注意到,如果我再次登录,旧缓存仍然存在。 这是正常的吗? 当我导航到 LoginModule?
时,不应破坏 MainModule 中提供的服务事实并非如此。移动到其他模块并不意味着之前的延迟加载模块将被销毁。它仍然会存在。这就是为什么当我们尝试再次导航到该模块时 Angular 不请求该延迟加载模块的块。
该服务也将保留在内存中。只有当用户手动重新加载应用程序时,服务才会重新初始化。
在将用户导航到 /login
路由之前,您必须手动清理缓存。执行此操作的理想位置可以是您导航离开的组件的 ngOnDestroy
。
你会预料到会发生这种情况,不幸的是,由于惰性模块的性质,这不会发生,阅读 here 为什么不呢。基本上延迟加载的模块留在内存中。
然而,您可以做的是将提供程序放在主组件视图中:
@NgModule({
declarations: [
MainComponent
]
})
export class MainModule {}
@Component({
//...
providers: [ CarService ]
})
export class MainComponent {}
这将在 MainComponent
被销毁时销毁 CarService
实例