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:[''] 
    }); 

フォームを送信するとき、このアイテムプロパティはオブジェクトによって保存されます。 例オブジェクト:フォーム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

presentRateの値をmd2-autocompleteの選択値に基づいて更新しようとしているとします。私が正しいんだ場合は、次の作業をする必要があります:

テンプレート:

(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

オリジナルの例外:ヌルのプロパティ 'rate'を読み取れません –

+0

これは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'配列の2番目の 'inArray'コントロール要素を取得します。 –

+0

'たInitItem(){ 戻りthis.fb.group({ 項目:[ '']、 itemTypeに[ ']、 量:[ '']、 presentRate:this.this.myForm.get( 'myOtherControlName.3.inArray')、 合計:[''] }); 'それは正しいですか? –

関連する問題