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

5

我的应用程序架构如下: enter image description here

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

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

2个回答

7
你可能期望这样的事情发生,但由于懒加载模块的本质特性,并不会发生这种情况。请点击此处了解原因。基本上,懒加载模块会一直保留在内存中。
然而,你可以将提供者放置在主组件视图中:
@NgModule({
  declarations: [
     MainComponent
  ]
})
export class MainModule {}

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

MainComponent被销毁时,这将销毁CarService实例。


2

这并不是事实。转移到其他模块并不意味着之前的惰性加载模块会被销毁,它仍然存在。这就是为什么当我们再次尝试导航到该模块时,Angular不会请求该惰性加载模块的代码块。

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

您需要在将用户导航到/login路由之前手动清除缓存。最理想的做法是在您要离开的组件的ngOnDestroy中执行此操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接