¿Por qué no se llama a ngOnInit() cuando se resuelve una clase Injectable ?
Código
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()'); } }Salida de consola
FROM constructor()Los ganchos del ciclo de vida, como OnInit() , funcionan con directivas y componentes. No funcionan con otros tipos, como un servicio en su caso. De documentos:
Un Componente tiene un ciclo de vida administrado por Angular mismo. Angular lo crea, lo representa, crea y representa a sus elementos secundarios, lo comprueba cuando cambian sus propiedades enlazadas a datos y lo destruye antes de eliminarlo del DOM.
Las instancias de directivas y componentes tienen un ciclo de vida ya que Angular las crea, actualiza y destruye.
No conozco todos los ganchos del ciclo de vida, pero en cuanto a la destrucción, ngOnDestroy en realidad recibe una llamada en Injectable cuando se destruye su proveedor (por ejemplo, un Injectable suministrado por un componente).
De los docs :
Gancho de ciclo de vida que se llama cuando se destruye una directiva, tubería o servicio .
En caso de que alguien esté interesado en la destrucción , consulteesta pregunta:
Agregando a la respuesta de @Sasxa ,
En Injectables , puede usar class normalmente que está poniendo el código inicial en el constructor en lugar de usar ngOnInit() , funciona bien.