首页 > 解决方案 > 如何获取每个组件或页面留下的所有未完成订阅的计数?

问题描述

  1. 在 Ionic 应用程序中,页面只是一个组件。
  2. 我想检查每个页面未完成的订阅总数。这意味着他们正在做不需要的后台工作。
  3. 假设我有一个pageChanged$通知页面何时更改的通知。

我目前的尝试

    let activeSubscriptions = 0;
    let originalUnsubscribe = Subscription.prototype.unsubscribe;
    Subscription.prototype.unsubscribe = function (...args) {
      activeSubscriptions--;
      return originalUnsubscribe.call(this, ...args);
    }
    let originalSubscribe = Observable.prototype.subscribe;
    Observable.prototype.subscribe = function (...args) {
      activeSubscriptions++;
      return originalSubscribe.call(this, ...args);
    }

    let pageChanged$ = new Subject<string>();
    let lastActiveSubs = 0;
    let lastName = 'Start';
    pageChanged$
      .subscribe((pageName) => {
        console.log(`${lastName} += ${activeSubscriptions - lastActiveSubs}`)
        lastActiveSubs = activeSubscriptions
        lastName = pageName
      })
  1. 你能提供任何更好的方法或改进吗?
  2. 当页面'A'被推到页面'B'的顶部时,页面'B'是否被破坏或缓存?

标签: angularionic-frameworkrxjs

解决方案


我所做的是创建一组订阅,其中有一个或多个 Observables 可以收听。每当我创建订阅时,我都会将其添加到该数组中。然后,当 ngOnDestroy 被击中时,我会遍历所有这些并取消订阅:

@IonicPage()
@Component({
  selector: 'my-selector',
  templateUrl: 'myselector.html'
})
export class APage {
   subscriptions : Array<Subscription> = new Array<Subscription>();

   ngOnInit() {
      let a_new_subscription = someObservable.subscribe(someFunction);
      this.subscriptions.push(a_new_subscription);
      //Add as many subscriptions as created
   }

   //...

   ngOnDestroy(){
     this.subscriptions.forEach(
        subscription => {
           subscription.unsubscribe();   
        }
     )
   }
}

推荐阅读