2017-09-04 13 views
3

私はフォームコンポーネントのかなりのコードを減らすためにformbuilderを使用しようとしていますが、私はそれを動作させることができません。私は何かが足りないのですか?フォームビルダーはフォームグループを見つけることができません

component.html

<form [formGroup]="myForm" class="mt-3" (ngSubmit)="onSubmit()" novalidate> 
<fieldset formGroupName="name"> 

    <div class="form-group" [ngClass]="{'has-danger': firstName.invalid && (firstName.dirty || firstName.touched), 'has-success': firstName.valid && (firstName.dirty || firstName.touched)}"> 
     <label>First Name</label> 
     <input type="text" class="form-control" formControlName="firstName"> 
    </div> 

    <div class="form-group" [ngClass]="{'has-danger': lastName.invalid && (lastName.dirty || lastName.touched), 'has-success': lastName.valid && (lastName.dirty || lastName.touched)}"> 
     <label>Last Name</label> 
     <input type="text" class="form-control" formControlName="lastName"> 
    </div> 

</fieldset> 

<div class="form-group" [ngClass]="{'has-danger': email.invalid && (email.dirty || email.touched), 'has-success': email.valid && (email.dirty || email.touched)}"> 
    <label>Email</label> 
    <input type="email" class="form-control" formControlName="email"> 
</div> 


<div class="form-group" [ngClass]="{'has-danger': password.invalid && (password.dirty || password.touched), 'has-success': password.valid && (password.dirty || password.touched)}"> 
    <label>Password</label> 
    <input type="password" class="form-control" formControlName="password"> 
</div> 


<div class="form-group" [ngClass]="{'has-danger': language.invalid && (language.dirty || language.touched), 'has-success': language.valid && (language.dirty || language.touched)}"> 
    <label>Language</label> 
    <select class="form-control" formControlName="language"> 
     <option value="">Please select a language</option> 
     <option *ngFor="let lang of langs" [value]="lang">{{lang}}</option> 
    </select> 
</div> 

<button type="submit" class="btn btn-primary" [disabled]="!myForm.valid">Submit</button> 

component.ts

import { Component, OnInit, AfterViewInit, Pipe } from '@angular/core'; 
import { FormsModule, FormGroup, FormControl, Validators, ReactiveFormsModule, FormBuilder } from '@angular/forms'; 

export class ModelDrivenFormFormModelValidationComponent implements OnInit { 
    langs: string[] = ['English', 'French', 'German']; 

    myForm: FormGroup; 

    constructor(private fb: FormBuilder) { 
     this.createForm(); 
    } 

    createForm() { 
     this.myForm = this.fb.group({ 
      name: this.fb.group({ 
       firstName: ['', [Validators.required]], 
       lastName: ['', [Validators.required]] 
      }), 
      email: ['', [Validators.required, Validators.pattern('[^ @]*@[^@]*')]], 
      password: ['', [Validators.required, Validators.minLength(8)]], 
      language: '' 
     }); 
    } 

    ngOnInit() {} 
} 
+1

firstNameの.invalid' '試してみてください - ?疑問符私は今朝、それを試してみましたが、それはまだ私に同じエラーを与え、今午後10時で、それは – Cristophs0n

+0

ありがとう定義されるまで、オプションを設定しますあなたがそれをソートしてくれてうれしい – user2983177

+0

ませちゃったごめんなさいを働いていないです、 – Cristophs0n

答えて

2

コンポーネントテンプレートは、それが宣言される前に、変数にアクセスしようとしています。安全なナビゲーションオペレータ?.をすべてのフォームフィールドに使用して、それを回避します。例の下:反応性の形態では

<div class="form-group" [ngClass]="{'has-danger': password?.invalid && (password?.dirty || password?.touched), 'has-success': password?.valid && (password?.dirty || password?.touched)}"> 
    <label>Password</label> 
    <input type="password" class="form-control" formControlName="password"> 
</div> 
+0

ありがとう、しかし今、私のバリデーターは動作していません、コントロールのプロパティにアクセスしようとしているところに問題がありますか? – user2983177

1

、あなただけ(逆にあなたがテンプレート参照変数を使用する駆動フォームをテンプレートに)フォームコントロールを参照する例emailために使用することはできません。

[ngClass]="{'has-danger': myForm.controls.email.invalid && ..... } 

(それはあまりにもここで安全なナビゲーション演算子を必要とするかもしれない、ないように注意してください、あなたを:あなたは、あなたのemail検証はこのようになります。例えばので、テンプレート内の実際のフォームコントロールを参照する必要が

これは長いパスなので、実際にフォームを作成した後にこれを変数に割り当てることができます。たとえば、変数emailの場合は、今使っているコードを使うことができます。

email: FormControl; 

createForm() { 
    this.myForm = this.fb.group({ 
     .... 
    }); 

    this.email = this.myForm.controls.email; 
} 
+0

助けてくれてありがとう – user2983177

+0

問題ありません!良い一日と幸せなコーディングがあります:) – Alex

関連する問題