2017-10-12 57 views
0

當窗體設置爲有效,我有以下組成部分:Angular4,initalizing

@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

嗯,只是一個cauz我想在這裏使用模板驅動的表單而不是模型驅動的表單 – Scipion

+1

模板驅動的表單委託創建他們的表單控件爲指令。這些需要花費多個週期來構建整個樹,因此在操縱任何這些控件之前必須等待。使用ngAfterViewInit你必須使用setTimeout,然後才能驗證控件或設置一個值。 –