我正在使用表单数组。我有一个表单模板。用户正在保存他的受益人。因此,当我从服务中获得他的受益人时,我会根据他有多少受益人来动态构建他的表格。下面是构造函数代码。在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中有什么问题。
答案 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');
});