¿Por qué no se ngOnInit()llama cuando Injectablese 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 la consola
FROM constructor()
javascript
angular
typescript
Levi Fuller
fuente
fuente

ngOnInitlógica al constructor deInjectableclases? Acabo de recordar haber leído que deberías mantener cualquier lógica fuera del constructor por cualquier razón.providersmatrices. Si desea un servicio singleton, colóquelo en el módulo principalprovidersy si desea servicios por componente, agréguelos directamente al componente.ngOnDestroyse llama para servicios inyectadosNo conozco todos los ganchos del ciclo de vida, pero en cuanto a la destrucción,
ngOnDestroyrealidad me llaman Injectable cuando se destruye su proveedor (por ejemplo, un Injectable suministrado por un componente).Desde el
docs :En caso de que alguien esté interesado en la destrucción, revise esta pregunta:
fuente
ngOnInitno se llama :-( Realmente quería hacer algo de magia de inicialización retrasada transparente. SingOnDestroyse puede llamar, no veo por qué init no puedeNota: esta respuesta se aplica solo a componentes y directivas angulares, NO a servicios.
Tuve este mismo problema cuando
ngOnInit(y otros ganchos del ciclo de vida) no estaban activando mis componentes, y la mayoría de las búsquedas me llevaron aquí.El problema es que estaba usando la sintaxis de la función de flecha (
=>) así:Aparentemente, eso no funciona en Angular 6. El uso de la sintaxis de la función sin flecha soluciona el problema:
fuente
ngOnInit.Tuve que llamar a una función una vez que se inicializó mi dataService, en su lugar, lo llamé dentro del constructor, eso funcionó para mí.
fuente
fuente