angular - 使用 valueChanges 动态更新 FormArray 中的表单值
问题描述
我知道我们可以valueChanges
在 FormArray 上使用并在键入时查看更改。我的问题很直接:我如何执行array.at(i).patchValue
in valueChanges?我需要知道我键入 value 和 update 的行的索引FormControl
。我想要实现的是例如在计算器中,我想在添加两个数字时动态显示值,而不必在输入字段之外单击。
ngOnInit() {
this.form = this.fb.group({
fdnUnitPrice: [''],
cap_values: this.fb.array([this.fb.group({
name: '',
fdnTotalShare: '',
fdnVal: '',
}
)])
})
this.onValChanges();
}
onValChanges(): void {
this.capValues.valueChanges.subscribe(val => {
console.log(val.length)
})
}
在我上面的代码中,结果应该是什么fdnVal
,当我乘以时它应该显示fdnUnitPrice
值fdnTotalShare
。下一行可能会有不同的值fdnTotalShare
,所以fdnVal
应该不同。
解决方案
我不会使用valueChanges
formarray,而是使用一个在用户输入时调用的函数。由于单价也是可编辑的,我们可以在上面使用相同的功能。所以我建议如下:
在模板中:
<input type="number" formControlName="fdnTotalShare" (input)="calculate(cap)"/>
cap
来自哪里:*ngFor="let cap of capValues.controls;">
和功能:
calculate(cap) {
cap.get('fdnVal').setValue(
this.form.get('fdnUnitPrice').value * cap.get('fdnTotalShare').value
)
}
然后我们将实际监听valueChanges
单价表单控件,然后迭代表单数组,并为每个表单组调用calculate
函数:
onValChanges(): void {
this.form.get('fdnUnitPrice').valueChanges.subscribe((val) => {
this.capValues.controls.forEach(cap => {
this.calculate(cap);
})
})
}
演示:堆栈闪电战
valuChanges
PS:组件销毁时记得取消订阅!
推荐阅读
- r - R Studio:方差分析因子和 Tukey 事后问题
- reactjs - 从 create-react-app 更新到新版本的步骤?
- java - 为什么使用 lambdas 进行日志记录更好的事实
- python - Sklearn - 从逻辑回归中返回前 3 类
- java - IntelliJ 运行使用 @Ignore 注释的 Kotlin 测试
- .net - 如何从 Chrome DevTools 网络选项卡获取 URL?
- kubernetes - 卷已专门附加到一个节点,不能附加到另一个节点
- python - python通过mrjob找到最大值
- r - 从多级逻辑回归中提取条件模式
- json - 使用 jq 转换数组中的 authorizedKey 字段