Angular 在何处初始化被动表单中的表单组?

Angular 在何处初始化被动表单中的表单组?,angular,typescript,angular-reactive-forms,angular11,Angular,Typescript,Angular Reactive Forms,Angular11,在严格模式下使用Angular 11和Typescript 4,我有: export class ContactComponent implements OnInit { form: FormGroup; constructor(private formBuilder: FormBuilder) { } ngOnInit() { this.form = this.formBuilder.group({ email: ['', [Validators.r

在严格模式下使用Angular 11和Typescript 4,我有:

export class ContactComponent implements OnInit { 

  form: FormGroup;

  constructor(private formBuilder: FormBuilder) { }

  ngOnInit() {

    this.form = this.formBuilder.group({ 
      email: ['', [Validators.required, Validators.email]],
      name: ['', [Validators.required, Validators.maxLength(40)]],
    });

  }
我得到生成错误:

 Property 'form' has no initialiser and is not definitely assigned in the constructor.
FormGroup不应该在ngOnInit上草签吗

FormGroup不应该在ngOnInit上草签吗

不一定是这样;我发现直接在类上初始化大多数内容最简单,如下所示:

export class ContactComponent implements OnInit { 

  form = this.formBuilder.group({ 
    email: ['', [Validators.required, Validators.email]],
    name:  ['', [Validators.required, Validators.maxLength(40)]],
  });

  constructor(private formBuilder: FormBuilder) { }

}
这对我来说很好

初始化需要来自DOM的数据(
@Input
@ViewChild
等)时会出现例外情况,因为这些东西会按照以下所述在不同的方式初始化:

  • @Input()
    → <代码>恩戈尼特
  • @ViewChild()
    → <代码>ngAfterViewInit
  • @ContentChildren()
    → <代码>ngAfterContentInit
初始化依赖于
@Input()
的内容将在相应的生命周期挂钩
ngOnInit
中完成,但是,这并不能满足严格的规则,因此
是必需的

export class ContactComponent implements OnInit { 
  @Input() input!: number;

  inputDoubled!: number;
  
  form = this.formBuilder.group({ 
    email: ['', [Validators.required, Validators.email]],
    name:  ['', [Validators.required, Validators.maxLength(40)]],
  });

  constructor(private formBuilder: FormBuilder) { }

  ngOnInit() {
    this.inputDoubled = this.input * 2;
  }
}

在严格模式下,构造函数是我们最初设置属性的地方。我们在ngoninit中移动其余的初始化逻辑。我的首选通常是在声明属性
form:FormGroup=this.formBuilder.group({…})时初始化表单