Angular: Servicios y DI

Angular
Angular
Actualizado: 14/02/2025

¡Desbloquea el curso completo!

IA
Ejercicios
Certificado
Entrar

En Angular 18, los servicios y la inyección de dependencias juegan un papel crucial en la arquitectura y desarrollo de aplicaciones. Los servicios permiten organizar y reutilizar código, mientras que la inyección de dependencias facilita la gestión de dependencias entre los componentes. A continuación, se explorarán los conceptos y prácticas recomendadas para trabajar con servicios e inyección de dependencias en Angular 18.

Creación de servicios en Angular 18

Para crear un servicio en Angular 18, se utiliza el decorador @Injectable(). Este decorador indica que el servicio puede ser inyectado en otros componentes o servicios.

import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root'
})
export class MiServicio {
  constructor() { }

  obtenerDatos(): string {
    return 'Datos del servicio';
  }
}

En este ejemplo, el servicio MiServicio está disponible en toda la aplicación gracias a la opción providedIn: 'root'. Esto asegura que Angular gestione una única instancia del servicio.

Inyección de dependencias en componentes

Para utilizar un servicio en un componente, se inyecta a través del constructor del componente.

import { Component, OnInit } from '@angular/core';
import { MiServicio } from './mi-servicio.service';

@Component({
  selector: 'app-mi-componente',
  template: `<p>{{ datos }}</p>`
})
export class MiComponente implements OnInit {
  datos: string;

  constructor(private miServicio: MiServicio) { }

  ngOnInit() {
    this.datos = this.miServicio.obtenerDatos();
  }
}

En este ejemplo, el servicio MiServicio se inyecta en el componente MiComponente y se utiliza en el método ngOnInit para obtener datos.

Inyección de dependencias jerárquica

Angular 18 permite definir servicios con diferentes alcances (scopes). Por defecto, los servicios definidos con providedIn: 'root' son singleton y están disponibles en toda la aplicación. Sin embargo, es posible limitar el alcance de un servicio a un módulo o un componente específico.

Guarda tu progreso

Inicia sesión para no perder tu progreso y accede a miles de tutoriales, ejercicios prácticos y nuestro asistente de IA.

Progreso guardado
Asistente IA
Ejercicios
Iniciar sesión gratis

Más de 25.000 desarrolladores ya confían en CertiDevs

Alcance en módulos

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { MiModuloComponent } from './mi-modulo.component';
import { MiServicio } from './mi-servicio.service';

@NgModule({
  declarations: [MiModuloComponent],
  imports: [CommonModule],
  providers: [MiServicio]
})
export class MiModulo { }

En este ejemplo, MiServicio está disponible solo para los componentes del módulo MiModulo.

Alcance en componentes

import { Component } from '@angular/core';
import { MiServicio } from './mi-servicio.service';

@Component({
  selector: 'app-mi-componente',
  template: `<p>{{ datos }}</p>`,
  providers: [MiServicio]
})
export class MiComponente {
  datos: string;

  constructor(private miServicio: MiServicio) {
    this.datos = this.miServicio.obtenerDatos();
  }
}

En este caso, MiServicio está disponible únicamente para el componente MiComponente y sus descendientes. Esto es útil para encapsular servicios que solo son relevantes para una parte específica de la aplicación.

Uso de Injector para inyección manual

Angular 18 también permite la inyección manual de dependencias utilizando la clase Injector.

import { Component, Injector } from '@angular/core';
import { MiServicio } from './mi-servicio.service';

@Component({
  selector: 'app-mi-componente',
  template: `<p>{{ datos }}</p>`
})
export class MiComponente {
  datos: string;

  constructor(private injector: Injector) {
    const miServicio = this.injector.get(MiServicio);
    this.datos = miServicio.obtenerDatos();
  }
}

Este enfoque es útil cuando se necesita resolver dependencias dinámicamente en tiempo de ejecución.

Completa Angular y certifícate

Únete a nuestra plataforma y accede a miles de tutoriales, ejercicios prácticos, proyectos reales y nuestro asistente de IA personalizado para acelerar tu aprendizaje.

Asistente IA

Resuelve dudas al instante

Ejercicios

Practica con proyectos reales

Certificados

Valida tus conocimientos

Más de 25.000 desarrolladores ya se han certificado con CertiDevs

⭐⭐⭐⭐⭐
4.9/5 valoración