tipos programación programacion poo polimorfismo orientado orientada objetos herencia ejercicios clases javascript angular typescript

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"); } }