如何从反应形式的其他 formControl 值自动更新 formControl 值 angular 2?
How to update formControl values automatically from other formControl values in reactive forms angular 2?
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{
itemName:"name",
itemRate:1000,...}
我如何使用项目对象的属性并修补我的 initItem() 方法属性中的值?我的场景是这样的,当用户 select 来自下拉列表的值时,项目将得到更新并且我想显示从其他 formControls 中的项目获得的值。
示例:
<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>
我想自动更新 presentRate 输入框的值。
我假设您正在尝试根据 md2-autocomplete
中的选定值更新每个 presentRate
的值。如果我是正确的,以下应该有效:
模板:
(change)="handleChange($event, i)"
分量:
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);
}
您可以订阅一个表单控件 valueChanges
并在另一个表单控件上调用 setValue
。
this.myForm.get('myControlName').valueChanges
.subscribe(val =>
this.myForm.get('myOtherControlName').setValue(val)
);
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{
itemName:"name",
itemRate:1000,...}
我如何使用项目对象的属性并修补我的 initItem() 方法属性中的值?我的场景是这样的,当用户 select 来自下拉列表的值时,项目将得到更新并且我想显示从其他 formControls 中的项目获得的值。 示例:
<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>
我想自动更新 presentRate 输入框的值。
我假设您正在尝试根据 md2-autocomplete
中的选定值更新每个 presentRate
的值。如果我是正确的,以下应该有效:
模板:
(change)="handleChange($event, i)"
分量:
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);
}
您可以订阅一个表单控件 valueChanges
并在另一个表单控件上调用 setValue
。
this.myForm.get('myControlName').valueChanges
.subscribe(val =>
this.myForm.get('myOtherControlName').setValue(val)
);