为什么我应该在构造函数中创建Angular2反应形式而不是ngOnInit?

时间:2017-04-24 15:08:16

标签: angular constructor angular2-forms

other responses所示,应该在ngOnInit()方法中启动Angular2应用程序的初始例程,使构造函数专门用于依赖注入。

但是,在我关注的Reactive Forms tutorial中,表单的初始化在构造函数中:

export class HeroDetailComponent3 {
  heroForm: FormGroup; // <--- heroForm is of type FormGroup

  constructor(private fb: FormBuilder) { // <--- inject FormBuilder
    this.createForm();
  }

  createForm() {
    this.heroForm = this.fb.group({
      name: '', // <--- the FormControl called "name"
    });
  }
}

真的存在重大差异,还是只是一个小问题?

3 个答案:

答案 0 :(得分:2)

初始化formGroup中的ngOnInit()并不是一种不好的做法,因为如果您希望使用依赖于(直接或间接)组件{{}的值初始化表单,则实际需要它。 1}} S上。

例如:

@Input()

答案 1 :(得分:1)

我相信它,因为构造函数中的createForm方法将在ngOninit之前执行,并且您的表单将在渲染组件后立即可用。

答案 2 :(得分:0)

取决于您的特定用例和设计。可能会遇到与get方法有关的问题,而其他formControls的某些方法可能会依赖这些方法。您可能会受益于在构造函数中创建表单,并且一旦呈现组件,表单就将准备就绪。但是,如果您需要对表单subscribe进行.valueChangesformControls的操作,则可能会出现计时问题。除非您formControls,否则您无法建立依赖的.subscribe,并且在初始化表单之前,您不能.subscribe。您可能会遇到error: cannot read property 'get' of undefined