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这很可能是从那时起改变的。当时的表单不是很稳定。