cel*_*ade 0 angular angular-reactive-forms
我有一个带有 FormAwway 的表单,其中显示了所购买的产品,这是我的组件:
constructor() {
this.purchaseForm = new FormGroup({
id: new FormControl(null, Validators.required),
purchase: new FormControl(null, Validators.required),
date: new FormControl(null, Validators.required),
products: new FormArray([]),
});
}
public createNewLine(object: any = {}): FormGroup {
const newLine = new FormGroup({
index: new FormControl(null),
id: new FormControl(object.id, Validators.required),
id_product: new FormControl(object.id_produto, Validators.required),
quantity: new FormControl(object.quantidade, Validators.required),
value_unit: new FormControl(object.valor_unitario, Validators.required),
value_total: new FormControl(object.valor_total, Validators.required),
});
const formArray = <FormArray>this.purchaseForm.get('products');
newLine.get('index').patchValue(formArray.length);
newLine.valueChanges.pipe(debounceTime(400)).subscribe(value => this.updateProductValue(value));
return newLine;
}
private updateProductValue(object): void {
const quantity = parseFloat(object.quantity);
const value_total = parseFloat(object.value_total);
const formArray = this.purchaseForm.controls['products'] as FormArray;
object.value_unit = value_total / quantity;
formArray.at(object.index).patchValue(object);
}
Run Code Online (Sandbox Code Playgroud)
当我更改数量或总价值的输入时,我需要更新该特定产品的单位价值。问题是,当我进行此计算并更新值时,它检测到新值更改并再次执行该函数,这会创建一个循环。
我在这里做错了什么?或者我需要做什么来防止这种行为?除了这个循环之外,其他一切都按预期工作。
小智 5
尝试像这样更改最后一行:
formArray.at(object.index).patchValue(object, { emitEvent: false, onlySelf: true });
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1987 次 |
| 最近记录: |