在调用ngOnDestroy时,是否有解决方案来完成可观察的事情? 我的意思是,当您只有一个组件实例时,创建新的子组件对我来说不是解决方案。 我试图通过更改组件 proto 中的函数来覆盖ngOnDestroy,但似乎有角度地收集ngOnDestroy函数,而根本没有使用更改过的方法。
答案 0 :(得分:2)
我个人使用这段方便的代码 https://github.com/NetanelBasal/ngx-take-until-destroy 我已经做过一些研究,说实话,这种方法是我能找到的最优雅的方法
例如,您可以使用take
takeUntil
等运算符来确保可观察对象的完成,则不必取消订阅
如果要动态创建组件,则始终可以将组件实例而不是“ this”传递给untilDestroyed
运算符
答案 1 :(得分:0)
我喜欢将一个主题仅仅用于破坏。在ngOnDestroy中,我触发next()和complete();
public destroy$ = new Subject<void>();
somesource$.pipe(
takeUntil(this.destroy$)
).subscribe(val => //somemething here);
ngOnDestroy():void {
this.destroy$.next();
this.destroy$.complete();
}
destroy $变量可以在组件外部使用,以查看组件是否被破坏。
someInstanceComponent.destroy$.subscribe(val => //do something);
大多数时候我将其设为私有,因为我很少在室外使用它。
答案 2 :(得分:-1)
那么ngOnDestroy是接口,因此您一直都可以覆盖它... 您想在ngOndestroy中完成从未完成的源代码吗? 您可以使用takeWhile并传递一个布尔值
// variables section
flag = true;
// somewhere when you want to subscribe
source$
.pipe(takeWhile(flag)).subscribe(()=>{});
ngDestroy(){
flag = false;
}