2017-10-12 11 views
0

をinitalizing時に有効に設定フォーム:Angular4、私は次のコンポーネント持っ

@ViewChild('myForm') myForm: NgForm 

ngAfterViewInit(): void { 
    this.myForm.valueChanges 
     .subscribe(() => { 
      if(this.myForm.valid) { 
      doSomethingWithTheFormData() 
      } 
     }) 
    } 

と私のテンプレートでは:

<form #myForm="ngForm"> 
    ... 
</form> 

唯一の心配は、デフォルトでmyForm.validも、trueであるということですrequiredフィールドは設定されていません。したがって、私はdoSomethingWithTheFormData()に失敗します。 フォームの初期化が完全に完了していない場合(ngAfterViewInit()にもかかわらず)のようです。

​​を私の状態で追加することで問題を回避することができましたが、これは正しい方法ではないように感じられます。

答えて

0

@ angular/formsモジュールのFormGroupを使用しないのはなぜですか?

this.eventForm = this.formBuilder.group({ 
    startTime: ['', Validators.required], 
    endTime: ['', Validators.required], 
}); 

は、その後、あなたのテンプレート

<form class="event-publisher__form" [formGroup]="eventForm" (ngSubmit)="onSubmit()" novalidate> 
    enter code here 
</form> 

に私は、これはReactiveFormsModuleを使用していることに注意してください。このモジュールをフィーチャモジュールにインポートし、FormBuilderをコンポーネントに挿入します。

+0

ここではモデル駆動型ではなくテンプレート駆動型を使用したい – Scipion

+1

テンプレート駆動型フォームは、フォームコントロールのディレクティブへの作成を委任します。これらは、ツリー全体を構築するために複数のサイクルを要します。したがって、これらのコントロールのいずれかを操作する前に待機する必要があります。 ngAfterViewInitを使用すると、コントロールを検証したり値を設定する前にsetTimeoutを使用する必要があります。 –

関連する問題