providers provide injectiontoken injection injectable explained example dependency dependency-injection angular

dependency-injection - injectiontoken - provide angular 6



Métodos de ciclo de vida para servicios en angular2 (2)

Los ganchos de ciclo de vida ngOn * que muestra son solo para componentes. Podría inyectar otro servicio (llamarlo TrackServiceLifecycles) en SampleService y hacer que el constructor SampleService () llame a un método en el otro servicio para informarle que se creó. Pero no se me ocurre una manera de notificar al otro servicio cuando se destruye SampleService (recolección de basura).

Ver también ECMAScript 6 class destructor.

Esta pregunta ya tiene una respuesta aquí:

¿Es posible tener ganchos de ciclo de vida para un servicio que está anotado con @Injectable() ?

Habría esperado que los ganchos del ciclo de vida fueran llamados a un servicio como este, pero se demostró que estaba equivocado, parece que está funcionando solo en @Component . ¿Hay una manera de informarse en un servicio cuando la inyección de dependencia crea / destruye un servicio?

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 } }


Los inyectables son solo clases normales (objetos normales) y, como tales, no tienen un ciclo de vida especial.

Cuando se crea un objeto de su clase, se llama al constructor de la clase, así que eso es lo que sería su "OnInit". En cuanto a la destrucción, un servicio realmente no se destruye. Lo único que podría suceder es que se recolecte la basura una vez que ya no haya una referencia a ella, lo que probablemente suceda después de que se haya eliminado el inyector de dependencia. Pero generalmente no tienes control sobre él, y no hay ningún concepto de deconstructor en JavaScript.

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