> Faqs > Un servicio puede implementar métodos del ciclo de vida de Angular?

Un servicio puede implementar métodos del ciclo de vida de Angular?

¿Es posible implementar dentro de un servicio los métodos OnInit y OnDestroy del ciclo de vida de los componentes Angular?

Respuestas

Hola!

Los servicios están para accede a orígenes de datos principalmente, conectarse con APIs o hacer operativas que descarguen de trabajo al controlador (componente en Angular). Por lo tanto desde un punto de vista conceptual no sería el lugar adecuado para poder implementar métodos como OnInit() y OnDestroy().

Estos métodos deben formar parte del componente, por lo que no podrías además implementarlos vía otro objeto que recibes por inyección de dependencias. Es decir, aunque los metieses en servicios, no seriviría de nada.

Si lo deseas tener en una clase aparte, por ejemplo para reutilizar el código de estos métodos en más de un componente, lo que se me ocurre es que los pusieras en una clase y que tus componentes extendieran de ella. ¿Me sigues?

export class MiComponente extends ComponenteBase implements OnInit, OnDestroy {
    // ...
}

En tu componente base (ComponenteBase) podrías tener los métodos del ciclo de vida:

export class ComponenteBase implements OnInit, OnDestroy {
  
  ngOnInit(): void {
    //
  }

  ngOnDestroy(): void {
    //
  }
}

Para ser sincera no lo he probado, pero me imagino que será perfectamente posible.

Alba
217 5 14 6

La respuesta corta es "no".

No es posible implementar los métodos del ciclo de vida por dos motivos:

  • Esos métodos deben formar parte del código del componente, deben ser métodos del propio componente. Si están en un servicio no te sirve, porque no se podrán invocar, al buscarlos en el componente.
  • Los servicios se inyectan en los componentes, no extienden a los componentes, por lo tanto, no es posible que los métodos del servicio se puedan agregar a los del componente.
Santiago
243 8 17 9