Angular doc here您可以看到下面的实现方式。即在formBuilder中声明constructor()和服务。我知道在constructor()内部使用服务是一种不良做法。即我们需要使用ngOnInit()。但是我也使用constructor()声明formBuilder属性。这是不好的做法吗?我也需要使用ngOnInit()吗?在formBuilder创建之前,页面创建将一直保持吗?

export class CartComponent {
  items;
  checkoutForm;

  constructor(
    private cartService: CartService,
    private formBuilder: FormBuilder,
  ) {
    this.items = this.cartService.getItems();

    this.checkoutForm = this.formBuilder.group({
      name: '',
      address: ''
    });
  }
}

最佳答案

简短的回答,是的,您应该将大多数初始化逻辑保留在ngOnInit生命周期挂钩中。

根据OnInit的角度文档,它用于


  
  在构造后不久执行复杂的初始化。
  在Angular设置输入属性后设置组件。
  


因此,执行逻辑操作(例如获取数据以及在ngOnInit lifeycle钩子上初始化Formbuilder)将更加干净。

您应该查看Angular团队负责人Misko Hevery的post,他概述了保持构造函数整洁的多种原因。

09-17 10:06