2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Angular コンポーネントのライフサイクル

Posted at

はじめに

Angularのコンポーネントには、ライフサイクルという概念がある。
Angularで開発をしている以上、コンポーネントのライフサイクルについては必ず頭に入れておきたい。

コンポーネントのライフサイクル

コンポーネントのライフサイクルについて説明する前に、コンポーネントについて理解する。
↓コンポーネントについて以下の記事で簡単に解説しているので参考までに。
Angular コンポーネントとは

コンポーネントとは、ビュー(View)を定義し、制御するものであると上記の記事で説明した。

コンポーネントはAngularアプリケーションの中心的な部分であり、アプリケーションの表示やインタラクションの多くがコンポーネントによって管理される。

コンポーネントは生成された後、プロパティ・子コンポーネントの変化を受けて状態(表示)を変化させていき、非表示になるタイミングで破棄される。

このような生成から破棄までの流れのことを、コンポーネントのライフサイクルという

では、ライフサイクルの中身を見ていく。

ライフサイクルの流れ

コンポーネントのライフサイクルは以下の図のような順序で処理される。
図.png

コンストラクター (constructor)

  • コンポーネントのインスタンスが生成される
  • 依存性の注入(Dependency Injection)などが行われる

ngOnChanges

  • @Input で受け取るプロパティの値が変化したときに実行される
  • 初回の値変更時にも呼ばれる

ngOnInit

  • コンポーネントの初期化処理を実行
  • @Input の値を受け取った後に呼ばれる

ngDoChecked

  • Angularの変更検知 (Change Detection) が実行されるたびに呼ばれる
  • 差分があるかどうかをチェックするタイミング

ngAfterContentInit

  • コンテンツ投影 (Content Projection) が完了したときに呼ばれる
  • ng-content で受け取った内容の初期化が完了した後の処理に使用

ngAfterContentChecked

  • コンテンツの変更を検知するたびに呼ばれる
  • ngAfterContentInit の後に呼ばれ、変更がないかチェック

ngAfterViewInit

  • 子コンポーネントやビューの初期化が完了したときに呼ばれる
  • ViewChildViewChildren で取得した要素を操作できる

ngAfterViewChecked

  • ビューが変更されるたびに呼ばれる
  • ngAfterViewInit の後に呼ばれ、更新があるかチェック

ngOnDestroyed

  • コンポーネントが破棄される直前に実行
  • メモリリークを防ぐための後処理(イベントリスナーの解除、タイマーのクリアなど)を行う

まとめ

Angularのコンポーネントは、生成から破棄までのライフサイクルを持ち、各フェーズで特定の処理が実行される。constructor でのインスタンス生成から始まり、ngOnInit での初期化、変更検知 (ngDoChecked など)、ビューやコンテンツの処理 (ngAfterViewInit など) を経て、ngOnDestroy で後処理を行う。
今回、ライフサイクルについて概要レベルで説明したが、今後、各フェーズの詳細について解説したい。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?