コンポーネントが読み込まれるたびに関数xを実行したい場合は、最初のかどうかにかかわらず、別のサイトに移動して戻るか、コンポーネントが読み込まれたのは5回目です。角2コンポーネントコンストラクタとOnInit
function xを何に入れるべきですか?コンポーネントコンストラクタまたはOnInit?
コンポーネントが読み込まれるたびに関数xを実行したい場合は、最初のかどうかにかかわらず、別のサイトに移動して戻るか、コンポーネントが読み込まれたのは5回目です。角2コンポーネントコンストラクタとOnInit
function 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()
}
}
最初のもの(コンストラクタ)はクラスのインスタンス化に関連しており、Angular2とは関係ありません。つまり、どのクラスでもコンストラクタを使用できます。新しく作成されたインスタンスの初期化処理を行うことができます。
もう一つはAngular2コンポーネントのライフサイクルフックに対応する:入力または出力結合値が
ngOnInit
を変更したとき
ngOnChanges
が呼び出されるが、そこで最初ngOnChanges
後に呼び出されます関数の初期化処理がコンポーネントのバインディングに依存している場合は、ngOnInit
を使用する必要があります(たとえば、で定義されたコンポーネントパラメータ)、それ以外の場合はコンストラクタで十分です。
を参照してくださいコンストラクタ上 'ngOnInit'を使用することが悪いだろうどのような状況はありますか? – dman
constructor()
はnew SomeClass()
のために呼び出されます。コンストラクタは、クラス階層内のフィールドの初期化順序を適切にします。
ngOnInit
は、コンポーネントの作成が完了したとき、およびバインディングを評価して初めて入力を更新した後に、Angularによって呼び出されるライフサイクルメソッドです。
あなたは100%正しいです、私はあなたのためにupvote。私の考えでは、 'ngOnInit'をReactの' componentDidMount'と記述すると、すべての混乱がなくなります。しかし、正直言って、開発者にとっては、呼び出されても初期化フレーズは1つだけ必要です。非常に古い方法では、クラスのような関数を使ってコンポーネントクラスを構築するので、インジェクションは引数として渡され、1つの '$ onInit'が必要です。 Ng2 +は美しい作品ではありません。 – stanleyxu2005
コンストラクタは、特定の制限があるTypeScript言語機能です。 Angularがそれをアボートすることはできません。 –
しかし、あなたは実際の質問に答えなかった。このケースではどちらを使うべきですか? –
ngOnInitはコンストラクタ呼び出しの直後に呼び出されません。その間にngOnChangesがあります:https://angular.io/guide/lifecycle-hooks – Hazlo8