Inyección de Dependencias

Inyección de Dependencias (Dependency Injection) en Angular

INYECCIÓN DE DEPENDENCIAS

Es un patrón de diseño orientado a objetos que permite el manejo de objetos entre componentes y que crea las instancias de la clase o clases automáticamente desde un servicio externo mediante el decorador @Injectable().

SERVICIOS

Los servicios son clases destinadas a la reutilización de código y mantener los datos de forma organizada (los datos no se encuentran en el mismo componente).

Creación de un servicio Angular

  1. ng generate service shared/services/datos --module app

Este servicio permite alojar los datos y mediante el decorador @Injectable permite crear instancias automáticas del objeto en el componente. En el ejemplo siguiente se crea un atributo con el modificador de acceso private y la propiedad readonly que es muy similar a una constante. Al atributo DATOS se le asigna un objeto de tipo User y el método getUser devuelve el resultado. Es necesario tanto en el atributo como en el método getUser especificar el tipo de objeto.

Ejemplo de un servicio implementando inyección de dependencias:

  1. import { Injectable } from '@angular/core';
  2. import { User } from "../model/user";
  3. @Injectable({
  4. providedIn: 'root'
  5. })
  6. export class DatosService {
  7. private readonly DATOS: User = {
  8. nombre: "Mónica",
  9. apellidos: "Cañero",
  10. pais: "España",
  11. ciudad: "Málaga"
  12. };
  13. constructor() { }
  14. getUser(): User {
  15. return this.DATOS;
  16. }
  17. }

Interface para los tipos de dato.

  1. export interface User{
  2. nombre: string;
  3. apellidos: string;
  4. pais: string;
  5. ciudad: string;
  6. }

Solo declarando los parámetros (modificador de acceso, atributo, objeto) el componente crea la instancia automáticamente. En el ejemplo se crea un atributo tipo User y en el método de inicialización se llama al método getUser del servicio creado anteriormente.

  1. import { Component, OnInit } from '@angular/core';
  2. import { User } from "../shared/model/apod";
  3. import { DatosService } from "../shared/services/datos.service";
  4. @Component({
  5. selector: 'ed-home',
  6. templateUrl: './home.component.html',
  7. styleUrls: ['./home.component.css']
  8. })
  9. export class HomeComponent implements OnInit {
  10. user: User;
  11. constructor(private datos: DatosService) { }
  12. ngOnInit() {
  13. this.user = this.datos.getUser();
  14. }
  15. }

De esta forma Angular permite alojar los datos y/o métodos para manejar esos datos desde un servicio externo.

Nota: Desde angular 6 no es necesario importar los módulos al componente principal ya que Angular lo hace automáticamente al crear un servicio desde Angular CLI, añadiéndo providedIn: 'root' al decorador @Injectable.

Comentarios: 0

Para poder comentar es necesario iniciar sesión



Este dominio utiliza cookies de terceros para crear estadísticas y publicidad personalizada. Si continúa navegando está aceptando su uso