javascript - Injectable クラスがインスタンス化されたときに ngOnInit が呼び出されない
なぜ Injectable クラスが解決されても ngOnInit() は呼び出されないのですか?
コード
import {Injectable, OnInit} from 'angular2/core';
import { RestApiService, RestRequest } from './rest-api.service';
@Injectable()
export class MovieDbService implements OnInit {
constructor(private _movieDbRest: RestApiService){
window.console.log('FROM constructor()');
}
ngOnInit() {
window.console.log('FROM ngOnInit()');
}
}
コンソール出力
FROM constructor()
回答 #1
ライフサイクルフックは、OnInit() のようにディレクティブやコンポーネントで動作します。あなたの場合のようなサービスのような他のタイプでは動作しません。ドキュメントから:
コンポーネントにはAngular自身によって管理されるライフサイクルがあります。Angularはコンポーネントを作成し、レンダリングし、その子コンポーネントを作成およびレンダリングし、データバインドされたプロパティが変更されたときにチェックし、DOMから削除する前に破棄します。
ディレクティブおよびコンポーネントのインスタンスには、Angular がそれらを作成、更新、破棄する際のライフサイクルがあります。
回答 #2
すべてのライフサイクルフックについてはわかりませんが、破棄について言えば、ngOnDestroy は、プロバイダーが破棄されるとき(例えば、コンポーネントによって提供される Injectable の場合)に実際に呼び出されます。
ドキュメントから:
ディレクティブ、パイプ、またはサービスが破棄されるときに呼び出されるライフサイクルフック。
もし誰かが破壊に興味がある場合に備えて、この質問をチェックしてください:
回答 #3
@Sasxaによる回答に追加して、
「Injectables」では、ngOnInit() を使う代わりに constructor に初期コードを入れるという形で、class を通常通り使用することができますが、問題なく動作します。