web-dev-qa-db-fra.com

Méthodes de cycle de vie pour les services en angulaire2

Est-il possible d'avoir des hooks de cycle de vie pour un service qui est annoté avec @Injectable()?

Je m'attendais à ce que les hooks du cycle de vie soient appelés sur un service comme celui-ci, mais je me suis trompé, il semble fonctionner sur @Component seulement. Existe-t-il un moyen d'être informé dans un service lorsque l'injection de dépendances crée/détruit un service?

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 }
}
33
Martin C.

Les injectables ne sont que des classes normales (objets normaux) et en tant que tels, ils n'ont pas de cycle de vie spécial.

Lorsqu'un objet de votre classe est créé, le constructeur de la classe est appelé, c'est donc ce que serait votre "OnInit". Quant à la destruction, un service n'est pas vraiment détruit. La seule chose qui pourrait arriver, c'est que les ordures sont récupérées une fois qu'il n'y a plus de référence, ce qui se produit probablement après que l'injecteur de dépendance a été supprimé lui-même. Mais vous n'avez généralement aucun contrôle dessus, et il n'y a pas de concept de déconstructeur en JavaScript.

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

Les crochets de cycle de vie ngOn * que vous montrez sont uniquement pour les composants. Vous pouvez injecter un autre service (appelez-le TrackServiceLifecycles) dans SampleService et demander au constructeur de SampleService () d'appeler une méthode sur l'autre service pour l'informer qu'il a été créé. Mais je ne peux pas penser à un moyen d'aviser l'autre service lorsque SampleService est détruit (ordures récupérées).

Voir aussi destructeur de classe ECMAScript 6

10
Mark Rajcok