2017-04-24 4 views
5

other responsesに示されているように、Angular2アプリケーションの初期ルーチンは、ngOnInit()メソッドで起動し、依存関係注入専用のコンストラクタを残す必要があります。ngOnInitではなく、コンストラクタでAngular2反応形式を作成するのはなぜですか?

しかし、私は以下のよReactive Forms tutorialで、フォームの初期化はコンストラクタである:

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" 
    }); 
    } 
} 

は本当に大きな違いがあるか、それだけでマイナーな問題ですか?

+0

オープン。 –

答えて

1

コンストラクタのcreateFormメソッドがngOninitより前に実行されるため、コンポーネントがレンダリングされるとすぐにフォームを使用できるようになります。あなたのフォームはあなたのコンポーネント@Input() sから(直接または間接的に)依存する値で初期化したい場合は、それが実際に必要とされるようにngOnInit()formGroupを初期化

0

は、悪い習慣ではありません。例えば

:再びPR角度ドキュメンテーションプロジェクト

class SignInFormComponent { 
    @Input() currentLogin: string; 
    formGroup: FormGroup; 

    constructor() { 
    // this.currentLogin is not known yet here 
    } 

    ngOnInit(): void { 
    this.formGroup = this._fb.group({ 
     loginEmail: [this.currentLogin, Validators.email], 
     loginPassword: [''], 
    }); 
    } 
} 
関連する問題