Angular 的 FormControl 导致无限循环

问题描述

我有以下逻辑:

1.component.ts

onChangeRow($event) {
    form.controls["value"].patchValue($event.data.value,{ emitEvent: false }); // 
}

2.component.ts

@Output() changeRow: EventEmitter<any> = new EventEmitter<any>();

this.formGroup.valueChanges.subscribe(data => {
  this.changeRow.emit({selfRef: this.selfRef,form: this.formGroup,config: this.config})
})

看起来第一个组件中的 patchValue 方法触发了一个循环,因为它的新值被 valueChanges 捕获并且循环继续直到我得到一个 Maximum call stack size exceeded 错误。有时它只触发 3 次,有时只触发一次。

我试图理解为什么emitEvent 属性在这里不起作用。

解决方法

尝试在 patchValue() 选项参数中将 onlySelf 设置为 true

onChangeRow($event) {
    form.controls["value"].patchValue($event.data.value,{ onlySelf: true,emitEvent: false }); 
}