将FormGroup.statusChanges转换为布尔值Observable

时间:2019-04-18 09:11:18

标签: angular rxjs

我正在努力寻找一种优雅的方法来将Angular的myForm.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不是boolean类型,而是string类型。

修改2: 好的,我想到了这个

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

我认为这就是我所需要的:)

1 个答案:

答案 0 :(得分:0)

您不必初始化另一个可观察的对象,只需从现有对象返回即可:

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