2017-10-12 37 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,然后才能验证控件或设置一个值。 –