ngOnInit non viene chiamato quando la class Injectable viene Istanziata

Perché non ngOnInit() chiamato ngOnInit() quando viene risolta una class ngOnInit() ?

Codice

 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()'); } } 

Uscita console

 FROM constructor() 

Gli hook del ciclo di vita , come OnInit() funzionano con direttive e componenti. Non funzionano con altri tipi, come un servizio nel tuo caso. Da documenti:

Un componente ha un ciclo di vita gestito da Angular stesso. Angular lo crea, lo rende, crea e rende i suoi figli, lo controlla quando le sue proprietà legate ai dati cambiano e lo distrugge prima di rimuoverlo dal DOM.

Le istanze di direttive e componenti hanno un ciclo di vita quando Angular crea, aggiorna e li distrugge.

Non so tutti gli hook del ciclo di vita, ma per quanto riguarda la distruzione, ngOnDestroy effettivamente chiamato Iniettabile quando il suo provider viene distrutto (ad esempio un iniettabile fornito da un componente).

Dai docs :

Lifecycle hook che viene chiamato quando una direttiva, una pipe o un servizio vengono distrutti.

Nel caso in cui qualcuno fosse interessato alla distruzione, controlla questa domanda:

Ho avuto questo stesso problema quando ngOnInit (e altri hook del ciclo di vita) non sparavano per i miei componenti, e la maggior parte delle ricerche mi ha portato qui.

Il problema è che stavo usando la syntax della funzione freccia ( => ) in questo modo:

 class MyComponent implements OnInit { public ngOnInit = () => { console.log("ngOnInit"); } } 

Apparentemente ciò non funziona in Angular 6. La syntax della funzione non-arrow risolve il problema:

 class MyComponent implements OnInit { public ngOnInit() { console.log("ngOnInit"); } }