FormGroup上的ValueChanges在onKeyUp和onBlur上触发

时间:2018-10-16 10:53:49

标签: angular angular-reactive-forms valuechangelistener

如果有效,我的反应性角形表单应在“向上键”上提交。

我在valueChanges上注册了一个订户,但是每个输入的名称分别为onKeyUp和onBlur,并且表单提交了两次。看来这是一个已知问题(https://github.com/angular/angular/issues/12540),建议使用解决方案distinctUntilChanged。 不幸的是,对于我来说似乎不起作用。无论我设置什么时间,提交人都会立即被解雇,而且仍然被解雇两次。

this.myFormGroup.valueChanges
  .pipe(debounceTime(2000), distinctUntilChanged())
  .subscribe(() => {
    if (this.myFormGroup.valid) {
      this.submitForm();
    }
  });

有人知道distinctUntilChanged是我的错误吗?还是有另一种方法可以防止在valueChanges上触发onKeyUp和onBlur?

1 个答案:

答案 0 :(得分:0)

distinctUntilChanged默认使用===比较,对象引用必须匹配,myFormGroup将在每次更改时发出一个对象,并且这些对象不是相同的 reference

尝试添加自定义方法来处理更改

distinctUntilChanged((p: any, n: any) => JSON.stringify(p) === JSON.stringify(n))

stackblitz demo

distinctUntilChanged