angular - 我是否必须取消订阅 ActivatedRoute(例如 params)可观察量?

标签 angular typescript angular2-router3 angular2-router

我发现很多例子中 ActivatedRoute Observable 像 paramsurl 被订阅但没有取消订阅。

constructor(private route: ActivatedRoute) {}

ngOnInit() {
  this.route.params
    // (+) converts string 'id' to a number
    .switchMap((params: Params) => this.service.getHero(+params['id']))
    .subscribe((hero: Hero) => this.hero = hero);
}
  • 路由对象和订阅是否会自动销毁并在每次创建组件时重新创建?
  • 我必须关心取消订阅那些 Observable 吗?
  • 如果不是,您能否解释一下 Router.routerState 中的 ActivatedRoute 对象树会发生什么情况?

最佳答案

没有

From the docs :

订阅组件中的可观察对象时,您几乎总是安排在组件销毁时取消订阅。

有一些少数特殊的可观察到的情况是没有必要的。 ActivatedRoute observables 属于异常(exception)

ActivatedRoute 及其可观察对象与路由器本身隔离。当不再需要路由组件时,路由器会销毁它,注入(inject)的 ActivatedRoute 也会随之消失。

请随时退订。这是无害的,绝不是坏习惯。

关于angular - 我是否必须取消订阅 ActivatedRoute(例如 params)可观察量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41138081/

相关文章:

javascript - Promise resolve 后如何正确测试 setTimeout

通过浏览器 URL 导航时 Angular 2 路由不起作用

angular - 创建带有可选子项的路由

带数据源 : pagination and filter is not working 的 Angular Material 表

angular - 为什么我的 Angular 应用程序在 StackBlitz 上运行时会出错?

javascript - Angular:将属性传递给动态组件模板

css - 如何增加 Angular 8 中 mat-dialog-actions 的宽度

typescript - Angular2 - long-stack-trace-zone.js :106 Uncaught ReferenceError: Zone is not defined

validation - Angular2 自定义表单验证器在类中失去对 `this` 的访问权限