1
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属性将被一个对象存储。 实例对象:如何从反应形式角2中的其他formControl自动更新formControl值?

item{ 
    itemName:"name", 
    itemRate:1000,...} 

如何使用项目对象的属性和补丁值在我initItem()methord物业我的情况是一样,当用户选择从下拉列表中值,该项目将得到更新我想显示从其他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输入框中的值。

回答

2

我假设您正试图根据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); 
} 
+0

'handleChange($事件:任何,I:指标){ const的控制:AbstractControl = this.myForm.get;('项$ {I} .presentRate'。) control.patchValue($ event.value.rate);'我喜欢这个,它可以工作,但是我从下拉列表中更改值时出现错误。 –

+0

原始异常:无法读取null' –

+0

'的属性'rate'这是md2-autocomplete的问题吗? –

3

您可以订阅一个表单控件的valueChanges和另一个叫updateValueAndValidity形式控制。

this.myForm.get('myControlName').valueChanges 
.subscribe(val => 
    this.myForm.get('myOtherControlName').updateValueAndValidity(val) 
); 
+0

感谢您的回复。但是如何访问formArray中的formControl? –

+0

'this.myForm.get('myOtherControlName.3.inArray')'获取'myOtherControlName'数组中的第二个'inArray'控件元素。 –

+0

'initItem(){ 返回this.fb.group({ 项目:[ ''], ITEMTYPE:[ ''], 量:[ ''], presentRate:this.this.myForm.get( 'myOtherControlName.3.inArray'), total:[''] });'它是正确的吗? –