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:[''] });'它是正確的嗎? –