最初にコンポーネントをロードするたびに関数xを実行したい場合は、別のサイトにナビゲートして戻るか、コンポーネントがロードされたのを5回目にします。
関数xを何に入れるべきですか?コンポーネントコンストラクタかOnInit?
コンストラクタは、TypeScriptクラスの定義済みのデフォルトメソッドです。 Angularとconstructor
の間に関係はありません。通常constructor
を使用していくつかの変数を定義/初期化しますが、Angularのバインディングに関連するタスクがある場合はAngularのngOnInit
ライフサイクルフックに移動します。 ngOnInit
はコンストラクタ呼び出しの直後に呼び出されます。コンストラクタでも同じことができますが、Angularのバインディングを開始するにはngOnInit
を使用することをお勧めします。
ngOnInit
を使用するには、コアライブラリからこのフックをインポートする必要があります。
import {Component, OnInit} from '@angular/core'
それからエクスポートされたクラスでこのインターフェースを実装します(これはこのインターフェースを実装することを強制するものではありませんが、一般的には行いました)。
両方の使用例
export class App implements OnInit{
constructor(){
//called first time before the ngOnInit()
}
ngOnInit(){
//called after the constructor and called after the first ngOnChanges()
}
}
詳しくは ConstructorとngOnInitの違い もご覧ください。
最初のもの(コンストラクタ)はクラスのインスタンス化に関連しており、Angular 2とは関係ありません。コンストラクタはどのクラスでも使用できるということです。新しく作成したインスタンスの初期化処理をその中に入れることができます。
2番目のものはAngular 2コンポーネントのライフサイクルフックに対応します。
ngOnChanges
が呼び出されますngOnInit
は最初のngOnChanges
の後に呼び出されますしたがって、関数の初期化処理がコンポーネントのバインディングに依存している場合はngOnInit
を使用する必要があります(たとえば、@Input
で定義されたコンポーネントパラメータ)。それ以外の場合はコンストラクタで十分です。
constructor()
はTypeScriptの機能で、new SomeClass()
のために呼び出されます。コンストラクタは、クラス階層内の適切なフィールド初期化順序を保証します。
ngOnInit
はAngular 2ライフサイクルメソッドで、コンポーネントの構築が完了し、バインディングを評価して最初に入力を更新した後にAngularによって呼び出されます。
ConstructorとngOnInitの違い もご覧ください。