覆盖ngOnDestroy

时间:2019-08-02 13:08:37

标签: javascript angular

在调用ngOnDestroy时,是否有解决方案来完成可观察的事情? 我的意思是,当您只有一个组件实例时,创建新的子组件对我来说不是解决方案。 我试图通过更改组件 proto 中的函数来覆盖ngOnDestroy,但似乎有角度地收集ngOnDestroy函数,而根本没有使用更改过的方法。

3 个答案:

答案 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;
}