我正在努力确定定义使用反应形式的组件的最佳实践 .
例如,Reactive Forms docs举个例子:
1)
export class HeroDetailComponent2 {
heroForm = new FormGroup ({
name: new FormControl()
});
}
和
2)
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"
});
}
}
显然, 1 的问题在于我们无法访问组件的属性,因此我们可以设置初始值 . 我们看到的更好的方法是选项 2 .
但是我也读过文档(目前找不到链接),应该避免将逻辑放在组件的构造函数中,而是应该支持ngOnInit(),因为它使测试更容易,性能更高 .
我遵循这样的做法,即尽可能将组件初始化逻辑放在ngOnInit()中 . 但是,当我有一个引用formGroup属性的组件时,我遇到了问题 .
出现此问题的原因是在执行ngOnInit之前呈现视图,因此我的表单组在此时未实例化 . 解决它的一种方法是在各个地方使用* ngIf - 但这对我来说似乎很麻烦 .
所以我的问题:
是否明智地忽略了这样的建议:不在构造函数中使用逻辑来支持ngOnInit?请记住,在某些情况下,我可以在制作formGroup实例之前进行一些计算?
我似乎无法找到适合的替代生命周期钩?有另一种方式吗?
1 回答
我建议你使用角度生命周期钩子并在
ngOnInit()
上创建反应形式