ngOnInit
Angular はデフォルトでライフサイクル フックを提供します。
ngOnInit
すでに がある場合、 を使用する必要があるのはなぜですかconstructor
?
ベストアンサー1
はConstructor
、クラスがインスタンス化されるときに実行されるクラスのデフォルトメソッドであり、クラスとそのサブクラスのフィールドの適切な初期化を保証します。Angular、またはより優れた依存性インジェクター(DI)は、コンストラクタパラメータを分析し、呼び出して新しいインスタンスを作成するときに、new MyClass()
コンストラクタパラメータの型に一致するプロバイダーを見つけようとし、それらを解決してコンストラクタに渡します。
new MyClass(someArg);
ngOnInit
Angular がコンポーネントの作成を完了したことを示すために Angular によって呼び出されるライフサイクル フックです。
OnInit
これを使用するには、次のようにインポートする必要があります(実際に実装することはOnInit
必須ではありませんが、良い方法と見なされます)。
import { Component, OnInit } from '@angular/core';
メソッドを使用するにはOnInit
、次のようにクラスを実装する必要があります。
export class App implements OnInit {
constructor() {
// Called first time before the ngOnInit()
}
ngOnInit() {
// Called after the constructor and called after the first ngOnChanges()
}
}
ディレクティブのデータ バインド プロパティが初期化された後にカスタム初期化ロジックを実行するには、このインターフェイスを実装します。ngOnInit は、ディレクティブのデータ バインド プロパティが初めてチェックされた直後、その子がチェックされる前に呼び出されます。ディレクティブがインスタンス化されるときに 1 回だけ呼び出されます。
ほとんどの場合、すべての初期化/宣言に使用しngOnInit
、コンストラクターで作業することを回避します。コンストラクターはクラス メンバーを初期化するためにのみ使用し、実際の「作業」を行うべきではありません。
したがって、依存性注入を設定するために使用し、他の用途にはあまり使用しないでくださいconstructor()
。ngOnInit() は「開始」するのに適した場所です。コンポーネントのバインディングが解決される場所とタイミングです。
詳細については、こちらをご覧ください:
@Input 値はコンストラクターではアクセスできないことに注意してください (コメントで提案してくれた @tim に感謝します)