2017-05-10 7 views
0

​​内にMdIncludeをネストしようとしています。つまり、特定のボタン/値を選択すると、その特定のボタンに関連付けられた追加入力フィールドがあります。たとえば、MdRadioButton内のMdInputは、フォーム内の値を更新しません

Shipping 

O - Same Address 
X - Different Address ........... 

私はかなり一般的なケースです。

次のように私はそれについて移動しようとした方法がある:

public ngOnInit() { 
    this.form = this.formBuilder.group({ 
     shipping: 'same', 
     address: { value: '', disabled: true } 
    }); 
} 

public shippingChange($event) { 
    if ($event.value === 'different') { 
     this.form.get('address').enable(); 
    } else { 
     this.form.get('address').disable(); 
    } 
} 

public submit() { 
    if (this.form.valid) { 
    this.shipping = this.form.value.shipping; 
    this.address = this.form.value.address; 
    } 
} 

(ここでplnkrは周りとのおもちゃに、です):

<form role="form" [formGroup]="form" (ngSubmit)="submit()"> 
    <md-radio-group formControlName="shipping" (change)="shippingChange($event)"> 
    <md-radio-button value="same">Current Address</md-radio-button> 
    <md-radio-button value="different"> 
     <span>Different Address:</span> 
     <md-input-container> 
     <input mdInput placeholder="Address" formControlName="address"> 
     </md-input-container> 
    </md-radio-button> 
    </md-radio-group> 
    <button md-raised-button type="submit">OK</button> 
    <h4>Shipping: {{shipping}}</h4> 
    <h4>Address: {{address}}</h4> 
</form> 

、ここでは、関連するスクリプトがあります。フォームは機能しているようですが、送信時にaddressの値は含まれていません(「別のアドレス」を選択したと仮定します)。 this.form.controlsの検査では、disabledがまだtrueに設定されていることがわかりました。これはおそらく値が存在しないためです。

しかし、私は明示的に上記のイベントハンドラでそのコントロールを有効にしました。ここで何が欠けていますか?

+0

私はあなたの質問がうまくいけば、それが無効になっていてもコントロールの価値を得ようとしています。そうですか?その場合は、 'form.value'の代わりに' form.getRawValue() 'を使用してください。 – developer033

+0

実際には、コントロールは有効になっています。 –

答えて

0

私はそれを理解しました。ここで問題となるのは、テキストをMdInputに入力して「送信」を押すと、同じコントロールがchange()のイベントを起動し、そのうちのどのイベントがMdRadioGroupになるかという問題です。

イベントハンドラは、undefinedであるvalueを参照し、再びMdInputを無効にします。そのため、フォームはその値を無視します。

関連する問題