CommunityProgramación y desarrollogithub.com

analogjs/angular-di

Implementa la inyección de dependencias en Angular v20+ usando inject(), tokens de inyección y configuración de proveedores. Útil para arquitectura de servicios, suministro de dependencias en diferentes niveles, creación de tokens inyectables y gestión de servicios singleton vs. con ámbito.

¿Qué es angular-di?

Esta habilidad permite implementar correctamente la inyección de dependencias (DI) en Angular v20+ utilizando el sistema moderno basado en `inject()`, tokens de inyección y configuración de proveedores. Es esencial para arquitectos y desarrolladores que necesitan gestionar la creación de servicios, definir dependencias en diferentes niveles (raíz, componente, elemento) y controlar el ciclo de vida de las instancias (singleton vs. con ámbito). Soporta plataformas como Angular CLI y entornos basados en Angular. La habilidad se activa al trabajar con la creación de servicios, configuración de proveedores, uso de tokens de inyección (InjectionToken) o al entender la jerarquía de DI. Al aprovechar las capacidades de `providedIn`, `providers` y la función `inject()`, los desarrolladores pueden construir aplicaciones modulares y mantenibles, evitando antipatrones y siguiendo las mejores prácticas de Angular.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/analogjs/angular-skills/tree/main/skills/angular-di

Installed? Explore more Programación y desarrollo skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

¿Qué hace angular-di?

Implementa la inyección de dependencias en Angular v20+ usando inject(), tokens de inyección y configuración de proveedores. Útil para arquitectura de servicios, suministro de dependencias en diferentes niveles, creación de tokens inyectables y gestión de servicios singleton vs. con ámbito. Se activa al crear servicios, configurar proveedores, usar tokens de inyección o entender la jerarquía de DI.

¿Qué es la Inyección de Dependencias en Angular?

La inyección de dependencias (DI) es un patrón de diseño donde las dependencias se proporcionan a los componentes en lugar de ser creadas internamente. Angular v20+ ofrece un sistema basado en la función inject() y los tokens de inyección (InjectionToken).

Características Clave

  • inject(): Función moderna para obtener dependencias en contexto de inyección.
  • Tokens de Inyección (InjectionToken): Permiten inyectar valores que no son clases (como configuraciones, cadenas, objetos).
  • Jerarquía de DI: Las dependencias pueden definirse a nivel de raíz, módulo, componente o elemento.
  • Proveedores: Configuración que indica cómo se crea una dependencia (singleton, factoría, alias).
  • Ámbito (Scope): Control de instancias únicas vs. nuevas instancias por contexto.

Ejemplo Básico

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

// Servicio simple
@Injectable({ providedIn: 'root' })
export class LoggerService {
  log(message: string): void {
    console.log(message);
  }
}

// Otro servicio que inyecta LoggerService
@Injectable({ providedIn: 'root' })
export class UserService {
  private logger = inject(LoggerService);

  getUser() {
    this.logger.log('Obteniendo usuario...');
  }
}

Uso de InjectionToken

Para valores no-clase:

import { InjectionToken, inject } from '@angular/core';

export const API_URL = new InjectionToken<string>('api.url');

// En un componente
@Component({...})
export class MyComponent {
  private apiUrl = inject(API_URL);
}

Configuración de Proveedores

Puedes configurar proveedores a diferentes niveles:

  1. Raíz (providedIn: 'root'): Singleton global.
  2. Componente (providers: [...]): Nueva instancia por componente.
  3. Elemento (viewProviders: [...]): Solo disponible para la vista del componente y sus hijos.
@Component({
  providers: [MyService],  // Nueva instancia por componente
  viewProviders: [MyService2], // Disponible solo en la vista
  standalone: true
})
export class ExampleComponent {
  private service = inject(MyService);
}

Jerarquía de DI

Angular resuelve las dependencias subiendo en la jerarquía de inyectores:

  1. Inyector de elemento (vista)
  2. Inyector de componente
  3. Inyector de módulo (si no es standalone)
  4. Inyector raíz
  5. Plataforma

Buenas Prácticas

  • Usar providedIn: 'root' para servicios singleton.
  • Preferir inject() sobre la inyección por constructor (más seguro en contextos dinámicos).
  • Definir tokens de inyección con nombres descriptivos.
  • Evitar la creación de dependencias dentro de componentes; delegar a servicios.
  • Mantener la jerarquía de DI lo más plana posible para facilitar pruebas.

Activación de la Habilidad

Esta habilidad se activa cuando trabajas con:

  • Creación de servicios (@Injectable)
  • Configuración de proveedores (providers, viewProviders)
  • Uso de InjectionToken
  • Comprensión o depuración de jerarquía de DI
  • Gestión de ámbito entre singleton y servicios por contexto

Individual skills in this repo

This repo contains 9 individual skills — each has its own dedicated page.

analogjs/angular-component

Create modern Angular standalone components following v20+ best practices. Use for building UI components with signal-based inputs/outputs, OnPush change detection, host bindings, content projection, and lifecycle hooks. Triggers on component creation, refactoring class-based inputs to signals, adding host bindings, or implementing accessible interactive components.

analogjs/angular-directives

Create custom directives in Angular v20+ for DOM manipulation and behavior extension. Use for attribute directives that modify element behavior/appearance, structural directives for portals/overlays, and host directives for composition. Triggers on creating reusable DOM behaviors, extending element functionality, or composing behaviors across components. Note - use native @if/@for/@switch for control flow, not custom structural directives.

analogjs/angular-forms

Build signal-based forms in Angular v21+ using the new Signal Forms API. Use for form creation with automatic two-way binding, schema-based validation, field state management, and dynamic forms. Triggers on form implementation, adding validation, creating multi-step forms, or building forms with conditional fields. Signal Forms are experimental but recommended for new Angular projects. Don't use for template-driven forms without signals or third-party form libraries like Formly or ngx-formly.

analogjs/angular-http

Implement HTTP data fetching in Angular v20+ using resource(), httpResource(), and HttpClient. Use for API calls, data loading with signals, request/response handling, and interceptors. Triggers on data fetching, API integration, loading states, error handling, or converting Observable-based HTTP to signal-based patterns.

analogjs/angular-routing

Implement routing in Angular v20+ applications with lazy loading, functional guards, resolvers, and route parameters. Use for navigation setup, protected routes, route-based data loading, and nested routing. Triggers on route configuration, adding authentication guards, implementing lazy loading, or reading route parameters with signals.

analogjs/angular-signals

Implement signal-based reactive state management in Angular v20+. Use for creating reactive state with signal(), derived state with computed(), dependent state with linkedSignal(), and side effects with effect(). Triggers on state management questions, converting from BehaviorSubject/Observable patterns to signals, or implementing reactive data flows.

analogjs/angular-ssr

Implement server-side rendering and hydration in Angular v20+ using @angular/ssr. Use for SSR setup, hydration strategies, prerendering static pages, and handling browser-only APIs. Triggers on SSR configuration, fixing hydration mismatches, prerendering routes, or making code SSR-compatible.

analogjs/angular-testing

Write unit and integration tests for Angular v20+ applications using Vitest or Jasmine with TestBed and modern testing patterns. Use for testing components with signals, OnPush change detection, services with inject(), and HTTP interactions. Triggers on test creation, testing signal-based components, mocking dependencies, or setting up test infrastructure. Don't use for E2E testing with Cypress or Playwright, or for testing non-Angular JavaScript/TypeScript code.

analogjs/angular-tooling

Use Angular CLI and development tools effectively in Angular v20+ projects. Use for project setup, code generation, building, testing, and configuration. Triggers on creating new projects, generating components/services/modules, configuring builds, running tests, or optimizing production builds. Don't use for Nx workspace commands, custom Webpack configurations, or non-Angular CLI build systems like Vite standalone or esbuild direct usage.

Skills relacionados