programacion - programación orientada a objetos de javascript
ngOnInit no se llama cuando se instancia la clase Inyectable (3)
¿Por qué no se
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 la consola
FROM constructor()
No conozco todos los ganchos del ciclo de vida, pero en cuanto a la destrucción,
ngOnDestroy
realidad se llama Injectable cuando se destruye su proveedor (por ejemplo, un Inyectable 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, revise this pregunta:
Los ganchos de 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. Angular lo crea, lo representa, crea y representa sus elementos secundarios, lo comprueba 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.
Nota: 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 disparaban por 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 (
=>
) como esta:
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 la sintaxis de la función sin flecha soluciona el problema:
class MyComponent implements OnInit {
public ngOnInit() {
console.log("ngOnInit");
}
}