Angular2 リアクティブ フォームを ngOnInit ではなくコンストラクターで作成する必要があるのはなぜですか? 質問する

Angular2 リアクティブ フォームを ngOnInit ではなくコンストラクターで作成する必要があるのはなぜですか? 質問する

示されているようにその他の回答Angular2 アプリケーションの初期ルーチンは ngOnInit() メソッドで起動し、依存性注入専用のコンストラクターを残す必要があります。

しかし、リアクティブフォームチュートリアル私が従っているように、フォームの初期化はコンストラクタ内にあります:

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

を初期化することformGroupngOnInit()悪い習慣ではありません。フォームをコンポーネントに (直接的または間接的に) 依存する値で初期化したい場合には実際に必要になるからです@Input()

例えば:

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: [''],
    });
  }
}

おすすめ記事