我是否必须取消订阅ActivatedRoute(例如参数)可观察结果



我找到了许多示例,其中ActivatedRoute可观察到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 S?
  • 中取消订阅
  • 如果没有,您可以解释Router中激活的对象树的发生的情况。routerState

no

来自文档:

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

很少有例外的观察到这是不需要的。ActivatedRoute可观测值是例外

激活的环绕及其可观察物与路由器本身绝缘。路由器不再需要时会破坏路由组件,并且注入了激活的部件会死亡。

无论如何都可以随意取消订阅。这是无害的,从来没有不良的做法。

作为有关subscriptionsActivatedRoute的获胜答案引号,Angular unsubscribes自动。

路由器不再需要时会破坏路由组件,并且注入了激活的部件与之死亡。

如果您想知道如何从Observables了解unsubscribe

import { Component, 
         OnInit,
         OnDestroy }      from '@angular/core';
import { ActivatedRoute } from '@angular/router'; 
// Type
import { Subscription } from 'rxjs/Subscription';

@Component({
  selector: 'app-example',
  templateUrl: './example.component.html',
  styleUrls: ['./example.component.scss']
})
export class ExampleComponent implements OnInit, OnDestroy {
  paramsSubscription : Subscription;
  constructor(private activatedRoute : ActivatedRoute) { }
  /* Angular lifecycle hooks
  */
  ngOnInit() {
    console.log("Component initialized");
    this.paramsSubscription = this.activatedRoute.params.subscribe( params => {
    });
  }
  ngOnDestroy() {
    console.log("Component will be destroyed");
    this.paramsSubscription.unsubscribe();
  }
}

当路由器导航到其他路线时,组件将被破坏,路由器state将不参考,这将使它们免费收集垃圾。

如果将此组件的引用传递给其他组件或服务,则该组件不会收集垃圾,并且订阅将保持活跃,但是我敢肯定(不核实)可观察到的可观察到可观察到的路由器驶离并导致订阅取消。

每当您将订阅添加到组件时,当组件被破坏时,几乎总是需要取消订阅。但是订阅激活的路由参数不需要退订,因为路由器在不再需要的情况下会破坏订阅。

http可观察到的调用,路由器可观察者不需要手动订阅。如果您处理其他可观察的可观察或可观察到的,则应在ngondestroy()上进行。您可以在官方对象中调用unsubscribe()方法在其中存储在组件中。

最新更新