Why should I create my Angular2 reactive form in the constructor instead of ngOnInit?
Initializing the formGroup
in ngOnInit()
is not a bad practice, as it will actually be required if you want your form to be initialized with values that depend (directly or indirectly) from your component @Input()
s.
For instance:
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: [''],
});
}
}
I belive it because of the createForm method in constructor will execute before ngOninit and your form will be ready for use as soon your component is rendered.
Depends upon your specific use case and design. Possibly you will run into issues relating to get
methods on which some of your other formControls
might depend on. You might benefit from creating your form inside the constructor and your form will be ready as soon as the component is rendered. However, if you need to do subscribe
to .valueChanges
on the form for some formControls
, you might have a timing issue. You cannot build your dependent formControls
unless you .subscribe
, and you cannot .subscribe
until the form is initialized. You might encounter error: cannot read property 'get' of undefined
.