Arrays 如何从反应窗体2中的其他formControl值自动更新formControl值?
提交表单时,此项属性将由对象存储。 示例对象:Arrays 如何从反应窗体2中的其他formControl值自动更新formControl值?,arrays,angular,autocomplete,angular-material2,reactive-forms,Arrays,Angular,Autocomplete,Angular Material2,Reactive Forms,提交表单时,此项属性将由对象存储。 示例对象: this.myForm = fb.group({ name: ['', [Validators.required, Validators.minLength(2)]], date: ['', [Validators.required, Validators.minLength(2)]], address: ['', [Validators.required, Validators.minLeng
this.myForm = fb.group({
name: ['', [Validators.required, Validators.minLength(2)]],
date: ['', [Validators.required, Validators.minLength(2)]],
address: ['', [Validators.required, Validators.minLength(2)]],
,
items: fb.array([
this.initItem(),
])
});
initItem() {
return this.fb.group({
item: [''],
itemType: [''],
amount: [''],
presentRate:this.myForm,
total:['']
});
如何使用item对象的属性并修补initItem()Method属性中的值?我的场景是,当用户从下拉列表中选择一个值时,该项将得到更新,并且我希望在其他FormControl中显示从该项获得的值。
例如:
我想自动更新“预浓缩”输入框中的值。我假设您正在尝试根据
md2 autocomplete
中的选定值更新每个预浓缩的值。如果我是正确的,那么以下几点应该有效:
模板:
<div *ngFor="let item of myForm.controls.items.controls; let i=index">
<div [formGroupName]="i">
<md2-autocomplete [items]="products"
item-text="product"
(change)="handleChange($event)"
placeholder="Product purchased"
formControlName="item"
>
</md2-autocomplete>
<md-input-container >
<input md-input placeholder="Present rate" [value]="presentRate" formControlName="presentRate" >
</md-input-container>
(change)="handleChange($event, i)"
组件:
<div *ngFor="let item of myForm.controls.items.controls; let i=index">
<div [formGroupName]="i">
<md2-autocomplete [items]="products"
item-text="product"
(change)="handleChange($event)"
placeholder="Product purchased"
formControlName="item"
>
</md2-autocomplete>
<md-input-container >
<input md-input placeholder="Present rate" [value]="presentRate" formControlName="presentRate" >
</md-input-container>
(change)="handleChange($event, i)"
您可以订阅表单控件的valueChanges
,并在另一个表单控件上调用setValue
handleChange($event: any, i: index) {
const control: AbstractControl = myForm.get(`items.${i}.presentRate`);
let newVal: any;
if ($event.value) {
newVal = $event.value.rate;
} else {
newVal = '';
}
control.patchValue(newVal);
}
handleChange($event:any,i:index){const-control:AbstractControl=this.myForm.get(
items.${i}.presentRate);control.patchValue($event.value.rate);
我喜欢这样做,但在更改下拉列表中的值时出错。这是md2自动完成的问题吗?在尝试访问任何属性之前,您必须检查该值是否有效。放置控制台.log($event)
以查看发生了什么。是的,它工作!!!如果($event.value){control.patchValue($event.value.rate);}else-control.patchValue(“”);
我添加了一个else条件来清除event.value为null时的值。这是正确的方法吗?感谢您的响应。但是如何在formArray中访问formControl呢?this.myForm.get('myOtherControlName.3.inArray'))
获取myOtherControlName
数组中的第二个inArray
控制元素。initItem(){返回this.fb.group({item:['],itemType:['],amount:['],presentRate:this.this.myForm.get('myOtherControlName.3.inArray'),总计:[']})
正确吗?我想你的意思是,因为它不是那样工作的。@GoodNightNerdPride这很可能是从那时起改变的。当时的表单不是很稳定。