IE中的Valuechange错误触发

时间:2018-08-02 17:15:46

标签: angular angular-reactive-forms

我正在使用表单数组。我有一个表单模板。用户正在保存他的受益人。因此,当我从服务中获得他的受益人时,我会根据他有多少受益人来动态构建他的表格。下面是构造函数代码。在oninit方法中,我获得了受益人的数量并构建了表单并设置了其值。一切正常,但是在IE中,在进行表单构建之前会触发formArray的valuechange。在chrome和firefox中,我没有这个问题。

constructor() {
this.pageForm = this._fb.group({
myForms: this._fb.array([]);
});
}

ngOnInit() {
count = 4; // Build 4 forms
this.buildForms(4, data); // Build and set its values
this.pageForm.myForms.valueChanges.subscribe(() => {
this.emitter.emit('changes');
});
}

上面的代码在chrome和FF中效果很好,即发射仅在加载时发生一次。但是在IE中,我看到了多次发射。要为IE编写任何特殊代码吗?如果我将valuechanges包装在setTimeOut内并带有一些计时器值,则它在IE中可以正常工作。那只是一个解决方法。不确定IE中有什么问题。

1 个答案:

答案 0 :(得分:1)

使用rxjs debounceTime运算符在一段时间后发出数据

首先导入那些运算符

debounceTime和distintUntilChanged,因此我们仅在去抖时间之后得到通知

import 'rxjs/add/operator/debounceTime';
import 'rxjs/add/operator/distinctUntilChanged';  


  ngOnInit() {
      count = 4; // Build 4 forms
      this.buildForms(4, data); // Build and set its values
      this.pageForm.updateValueAndValidity();
      this.pageForm.myForms.valueChanges.debounceTime(400)
        .distinctUntilChanged()
        .subscribe(() => {
        this.emitter.emit('changes');
    });