0

すべてのインスタンスに対してAbstractControlを定義する代わりに、Angular ReactiveフォームでmyForm.controlsプロパティを使用することができますか?Angular Reactive Forms:formGroupNameで.controlsプロパティを使用します。

このメソッドは、NG-Bookで提案されていますが、ネストされたフォームおよびFormGroupNameでは使用されません。

ここに私のコードです。

HTML:

<form [formGroup]="myForm" 
    (ngSubmit)="onSubmit(myForm.value)"> 
<div> 
    <input type="text" 
     id="nameInput" 
     placeholder="Product" 
     [formControl]="myForm.controls['name']"> 
    <div *ngIf="myForm.controls['name'].hasError('required')">Name is 
    required</div> 
</div> 
<div formGroupName="address"> 
    <input type="text" 
     id="streetInput" 
     placeholder="Enter Street" 
     [formControl]="myForm.controls['street']"> 
    <div *ngIf="myForm.controls['street'].hasError('required')">Street is required</div> 
</div> 
<button type="submit" class="ui button">Submit</button> 

JS:

export class App { 
    myForm: FormGroup; 

    constructor(fb: FormBuilder) { 
    this.myForm = fb.group({ 
     'name': ['', Validators.required], 
     'address': fb.group({ 
     'street': ['', Validators.required], 
     }); 
    } 
    } 
} 

私は入力にformControlName="street"を設定することができます実現が、その後、私はそれが検証状態だかを決定するためにAbstractControlを使用しなければならないと思います。どこで私の非入れ子formGroupとして、私はちょうどmyForm.controls['name'].hasError('required')を使用することができます。

+0

[Plunker](https://plnkr.co/edit/26ghRmJAmlIWXMqcZ9jT?p=preview) – bzmills

答えて

0

私はあなたの質問をよく理解しています。

コントロールからネストされた検証を取得しますか?

その後、あなたはmyForm.get('address').control['street'].hasError('required')または

myForm.get('address').get('street').hasError('required')を得ることができますし、errors.requiredhasError('required')を変更することができます。

これらのリンクは、フォームの検証に関する説明です。

https://angular.io/api/forms/FormGroup#example-4

https://angular.io/guide/form-validation#reactive-form-validation

私はあなたの質問、コメントを誤解している場合。

+0

はい、これは私が必要としていたものです。私は 'myForm.get( 'address')。control ['street']。hasError( 'required')'を使って作業しています。ありがとうございました! また、入力上で '[formControl] =" myForm.controls ['street'] "'を 'formControlName =" street "'に変更する必要がありました。この部分はまだ私には少し混乱しています。ネストされていなければ、 '[formControl] =" addGymForm.controls ['name'] "'を入力する必要があります。ネストされたformGroupsの構文はなぜ簡単ですか? – bzmills

+0

編集: ネストされていない場合は、入力に対して[formControl] = "myForm.controls ['street']" 'が必要です。ネストされたformGroupsの構文はなぜ簡単ですか? – bzmills

+0

私はあなたの質問を理解していません。あなたの質問は、「ネストされたフォームグループのシンテックスは、「ネストされていないフォームグループ」よりも簡単ですか? –

関連する問題