我正在Angular2的Component中实现以下功能:

export class MypageEditComponent {

  ngOnInit() {
    this.timer = Observable.timer(100, 100);
    this.timer.subscribe(t => {
      this.setFormData();
  }


  private setFormData() {
    this.editUserAcountType = this.authStore.registerInfo.account_type;
    this.editAddress = this.authStore.registerInfo.email;
    this.editUserName = this.authStore.registerInfo.username;
  }
}

一旦将值正确存储在Observable.timer中,我想停止setFormData()的重复。

但是不知道如何,请告诉我。

最佳答案

基本上有两种方法:

  • 调用unsubscribe()调用返回的Subscription对象上的subscribe()
  • 使用运算符

  • 只需unsubscribe,您就可以这样做。
    ngOnInit() {
      this.subscription = timer(100, 100).subscribe(t => {
        this.setFormData();
      });
    }
    
    private setFormData() {
      ...
      this.subscription.unsubscribe();
    }
    

    或者,您可以通过takeUntil()运算符使用Subject来完成Observable:
    this.subject = new Subject();
    
    ngOnInit() {
      timer(100, 100).pipe(
        takeUntil(this.subject),
      ).subscribe(t => this.setFormData());
    }
    
    private setFormData() {
      ...
      this.subject.next();
    }
    

    看看这些:
  • Difference between .unsubscribe to .take(1)
  • RxJS: takeUntil() Angular component's ngOnDestroy()

  • 2019年1月:已针对RxJS 6更新

    10-06 11:33