首页 > 解决方案 > 将 FormGroup.statusChanges 转换为布尔 Observable

问题描述

我正在努力寻找一种优雅的方式将 AngularmyForm.StatusChanges转换为更简单的Observable<boolean>指示表单是否有效:

this.valid$ = new Observable<string>();
const validObs$ = valid$.pipe(map( x => {
    console.log('x is: ' + x);
    return 'VALID' === x;
  }));

// This following line happens somewhere else, as soon as myForm is set
this.myForm.statusChanges.subscribe(this.valid$);
// Consume validObs$ wherever needed

我很确定有一种更好、更优雅、更直接的方法可以转换statusChanges为简单的布尔 Observable?

编辑:我应该重新评估我的问题如下:如何创建Observable<boolean>(映射表单状态)并在稍后阶段将其绑定到myForm.statusChanges?请注意,在我的示例中,Observable 不是布尔类型,而是字符串。

编辑2: 好的,我想出了这个

// In ctor:
this.mySubject = new Subject<boolean>();
// Later on, somewhere else
this.myForm.statusChanges.pipe(map(s => 'VALID' === s)).subscribe(this.subject);

我想这就是我需要的:)

标签: angularrxjs

解决方案


您不必初始化另一个 observable,只需从现有的返回:

formValid$(): Observable<boolean> {
  return this.myForm.statusChanges.pipe(map(status => status === 'VALID'));
}

推荐阅读