Методы жизненного цикла для услуг в angular2

Можно ли иметь хуки жизненного цикла для службы, которая помечена @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 }
}

2 ответа

Injectables - это просто обычные классы (обычные объекты), и поэтому у них нет особого жизненного цикла.

Когда создается объект вашего класса, вызывается конструктор класса, поэтому ваш OnInit будет таким. Что касается уничтожения, то сервис на самом деле не разрушается. Единственное, что может произойти, - это сбор мусора, если на него больше нет ссылки, что, вероятно, происходит после удаления инжектора зависимости. Но вы, как правило, не можете это контролировать, и в JavaScript нет концепции деконструктора.

@Injectable()
export class SampleService {
    constructor() {
        console.log('Sample service is created');
    }
}

Показанные вами хуки жизненного цикла ngOn* предназначены только для компонентов. Вы можете добавить другой сервис (назовите его TrackServiceLifecycles) в SampleService и заставить конструктор SampleService () вызвать метод другого сервиса, чтобы сообщить ему, что он был создан. Но я не могу придумать способ уведомить другой сервис, когда SampleService уничтожен (сборщик мусора).

Смотрите также деструктор класса ECMAScript 6

Другие вопросы по тегам