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

Rod*_*igo 7 constructor angular2-forms angular

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

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

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"
    });
  }
}
Run Code Online (Sandbox Code Playgroud)

是真的有重大差异还是只是一个小问题?

Jav*_*ome 15

初始化formGroupinngOnInit()并不是一个坏习惯,因为如果您希望使用依赖于(直接或间接)组件@Input()的值来初始化表单,则实际上需要这样做。

例如:

class SignInFormComponent {
  @Input() currentLogin: string;
  formGroup: FormGroup;

  constructor(private fb: FormBuilder) {
    // this.currentLogin is not known yet here
  }

  ngOnInit(): void {
    this.formGroup = this.fb.group({
      loginEmail: [this.currentLogin, Validators.email],
      loginPassword: [''],
    });
  }
}
Run Code Online (Sandbox Code Playgroud)