多次单击按钮时,Angular 6订阅清除

时间:2018-11-27 21:50:38

标签: angular rxjs

说我有一个“联系我们”按钮,其中包含对“联系我们”服务的订阅,该按钮在触发http请求后返回一个可观察到的内容。

如果用户单击按钮10次并发送10封电子邮件(需要),是否将运行10个并发订阅?如果是这样,在这种情况下进行订阅清理的最佳实践是什么?

2 个答案:

答案 0 :(得分:1)

只需将您的订阅保存在一个属性中,然后检查它是否存在,没有订阅,如果没有订阅则

cacheSub: Subscription;

contactUs() {
  if(!this.cacheSub) {
     this.cacheSub = this.service.cacheSub.subscribe(....);
  }
}

编辑

如果您想每次订阅并清理每个订阅,则可以

cacheSub: Subscription;

contactUs() {
     this.cacheSub = this.service.cacheSub.subscribe(() => {
        // some code here if you need it
        this.cacheSub.unsubscribe();
     });
}

contactUs() {
    this.cacheSub && this.cacheSub.unsubscribe();
    this.cacheSub = this.service.cacheSub.subscribe(() => {
            // some code here if you need it
    });
}

答案 1 :(得分:1)

如果您在订阅时向管道添加了take(1),则可以避免取消订阅-如果您要多次订阅

或者,在带有按钮的组件中进行单个预订,您可以在ngOnInit()constructor中进行初始化。在private contactSubscription: SubscriptionLike属性中保存对订阅的引用,然后在contactSubscription && contactSubscription.unsubscribe

中调用ngOnDestroy()