@Injectable()
アノテーションが付けられたサービスにライフサイクルフックを設定することは可能ですか?
ライフサイクルフックがこのようなサービスで呼び出されることを期待していましたが、間違っていたことが証明されました。@Component
のみ。依存性注入がサービスを作成/破棄するときにサービスで通知を受ける方法はありますか?
import {Component, Injectable, OnInit, OnDestroy} from 'angular2/core';
@Injectable()
export class SampleService implements OnInit, OnDestroy {
ngOnInit() {
console.log("OnInit")
}
ngOnDestroy() {
console.log("OnDestroy")
}
}
@Component({
selector: "sample",
template: "<div>Sample Component</div>",
providers: [ SampleService ]
})
export class SampleComponent {
constructor() { private _sampleService: SampleService }
}
注入可能オブジェクトは通常のクラス(通常のオブジェクト)であるため、特別なライフサイクルはありません。
クラスのオブジェクトが作成されると、クラスのコンストラクターが呼び出されるため、「OnInit」がそうなります。破壊に関しては、サービスは実際には破壊されません。唯一発生する可能性があるのは、参照がなくなるとガベージコレクションが行われることです。これは、依存関係インジェクター自体が削除された後に発生する可能性があります。ただし、通常はそれを制御することはできず、JavaScriptにはデコンストラクターの概念はありません。
@Injectable()
export class SampleService {
constructor() {
console.log('Sample service is created');
}
}
表示するngOn *ライフサイクルフックは、コンポーネント専用です。別のサービスをTrackServiceLifecyclesと呼び、SampleServiceに注入し、SampleServiceのconstructor()が他のサービスのメソッドを呼び出して、作成されたことを通知することができます。しかし、SampleServiceが破棄された(ガベージコレクションされた)ときに他のサービスに通知する方法は考えられません。
ECMAScript 6 class destructor も参照してください