angular - 如何获取每个组件或页面留下的所有未完成订阅的计数?
问题描述
- 在 Ionic 应用程序中,页面只是一个组件。
- 我想检查每个页面未完成的订阅总数。这意味着他们正在做不需要的后台工作。
- 假设我有一个
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
})
- 你能提供任何更好的方法或改进吗?
- 当页面'A'被推到页面'B'的顶部时,页面'B'是否被破坏或缓存?
解决方案
我所做的是创建一组订阅,其中有一个或多个 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();
}
)
}
}
推荐阅读
- php - 删除wordpress中的第一行html源代码
- stripe-payments - 没有这样的令牌:'btok_1JGm2oKFR93cFUSYN2bui4Yb' 当我尝试为 Stripe 客户创建银行账户时
- javascript - 无法使用官方示例在 Slate.js 编辑器中清楚地删除链接
- sql - Laravel query where field is less than sum of another field in related table (polymorphic relationship)
- algorithm - 找到强连通图,使得最大和最小边之间的差异最小
- javascript - 画布上方的三个 js 和 react 按钮
- c# - 无法获取多对多表属性的数据
- python - 当内核停止运行时触发类似“重新启动并运行所有”的行为
- perl - Perl 中的简单加法导致结果偏离小部分
- android - 使用 Kotlin 在 Android 中创建 PDF 文件