首页 文章

具有活性形式的组件的最佳实践是什么?

提问于
浏览
-1

我正在努力确定定义使用反应形式的组件的最佳实践 .

例如,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 回答

  • 0

    我建议你使用角度生命周期钩子并在 ngOnInit() 上创建反应形式

    export class HeroDetailComponent3 implements OnInit {
       heroForm: FormGroup; // <--- heroForm is of type FormGroup 
    
       constructor(private fb: FormBuilder) { // <--- inject FormBuilder
    
       }
    
       ngOnInit(){
          this.createForm();
       }
    
       createForm() {
         this.heroForm = this.fb.group({
           name: new FormControl('', [Validators.required])
         });
       }
    }
    

相关问题