No se llama a ngOnInit cuando se crea una instancia de la clase Injectable
¿ Por qué no se ngOnInit()
llama cuando Injectable
se resuelve una clase?
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()
Ganchos de ciclo de vida , como OnInit()
trabajar con directivas y componentes. No funcionan con otros tipos, como un servicio en tu caso. De documentos:
Un componente tiene un ciclo de vida administrado por el propio Angular. Angular lo crea, lo representa, crea y representa a sus hijos, lo verifica cuando cambian sus propiedades vinculadas a datos y lo destruye antes de eliminarlo del DOM.
Las instancias de directivas y componentes tienen un ciclo de vida a medida que Angular las crea, actualiza y destruye.
No conozco todos los enlaces del ciclo de vida, pero en cuanto a la destrucción, ngOnDestroy
en realidad me llaman Injectable cuando se destruye su proveedor (por ejemplo, un Injectable suministrado por un componente).
Desde eldocs :
Gancho del 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 , consulte esta pregunta:
Agregando a la respuesta de @Sasxa ,
Puede Injectables
usarlo class
normalmente, es decir, poner el código inicial en constructor
lugar de usar ngOnInit()
, funciona bien.
Nota: esta respuesta se aplica solo a los componentes y directivas de Angular, NO a los servicios.
Tuve el mismo problema cuando ngOnInit
(y otros ganchos del ciclo de vida) no se activaban para mis componentes, y la mayoría de las búsquedas me llevaron hasta aquí.
El problema es que estaba usando la sintaxis de la función de flecha ( =>
) así:
class MyComponent implements OnInit {
// Bad: do not use arrow function
public ngOnInit = () => {
console.log("ngOnInit");
}
}
Aparentemente eso no funciona en Angular 6. El uso de una sintaxis de función sin flecha soluciona el problema:
class MyComponent implements OnInit {
public ngOnInit() {
console.log("ngOnInit");
}
}