【问题标题】:return value from typescript observable function when press button按下按钮时从打字稿可观察函数返回值
【发布时间】:2020-04-05 13:46:03
【问题描述】:

我有以下代码

removeAlert() : Observable<boolean> {
    Swal.fire({
      title: 'delete this file ?',
      text: 'sth',
      icon: 'warning',
      showCancelButton: true,
      confirmButtonText: 'ok',
      cancelButtonText: 'cancel'
    }).then((result) => {
      if (result.value) {
        return of(true) ;
      } 
      else if (result.dismiss === Swal.DismissReason.cancel) {
        this.showError("canceled" , "sth else");
        return of(false) ;
      }
    });
    //return of(false) ;
  }

点击后如何观察值并返回

我的意思是这部分if(result.value)

【问题讨论】:

标签: angular typescript observable sweetalert2


【解决方案1】:

创建一个Subject 并在您的if/else 语句中为其发出一个next 值。请务必在发出值之前向主题 .subscribe() 发送值,否则不会发生任何事情。在我的代码中,我订阅了ngOnInit 生命周期方法:

myBool: boolean;
mySubject: Subject<boolean> = new Subject();

ngOnInit() {
  this.mySubject.subscribe(value => console.log('Value: ', value));
}

removeAlert() {
  if (this.myBool) {
    this.mySubject.next(true);
  } else {
    this.mySubject.next(false);
  }
  this.myBool = !this.myBool;
}

将点击事件绑定到组件模板中的removeAlert()方法:

<button (click)="removeAlert()">Click me</button>

这是一个stackblitz demo,上面的工作代码。

【讨论】:

    【解决方案2】:

    我想知道您到底想要实现什么。我猜你可以使用 Subject 对象。

    private subject = new Subject<boolean>();
    
    
    swal.fire({
    ...
    })
    .then(() => this.subject.next(true))
    
    

    然后订阅subject

    【讨论】:

      猜你喜欢
      • 2016-12-31
      • 2013-07-03
      • 1970-01-01
      • 2017-01-04
      • 2020-12-14
      • 1970-01-01
      • 2020-11-11
      • 2017-12-02
      • 1970-01-01
      相关资源
      最近更新 更多