gpt4 book ai didi

angular - 为什么订阅在组件销毁后仍然存在?

转载 作者:行者123 更新时间:2023-12-04 14:27:26 25 4
gpt4 key购买 nike

我的 Angular 应用程序有很多组件,其中一个是 MyComponent,其组件类如下所示:

import { Component, OnInit } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/interval';

@Component({
selector: 'app-my',
templateUrl: './my.component.html',
styleUrls: ['./my.component.scss']
})
export class MyComponent implements OnInit {
a = 'I still alive';
constructor() {}

ngOnInit() {
Observable.interval(1000).subscribe(x => console.log(this.a));
}
}

如果我访问 MyComponent,订阅将按预期开始。比如说,我现在离开 MyComponent 并且 MyComponent 现在应该被销毁。但是我仍然可以看到订阅仍然存在(控制台日志不断出现)。在宿主组件 (MyComponent) 被销毁后允许订阅继续存在的实际好处是什么?

(如果要退订,可以在MyComponent的ngOnDestroy()方法中进行,但如何退订不是这里讨论的重点)

最佳答案

在我对这个主题进行了一些研究之后,我发现我不需要取消订阅我的一些 Angular 管理的订阅,例如在 ActivatedRoute 上进行的订阅。 .这是什么official guide说:

When subscribing to an observable in a component, you almost always arrange to unsubscribe when the component is destroyed.

There are a few exceptional observables where this is not necessary. The ActivatedRoute observables are among the exceptions.

The ActivatedRoute and its observables are insulated from the Router itself. The Router destroys a routed component when it is no longer needed and the injected ActivatedRoute dies with it.

Feel free to unsubscribe anyway. It is harmless and never a bad practice.



在我必须退订的情况下,有效的 generalized approach被推荐。

关于angular - 为什么订阅在组件销毁后仍然存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49729885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com