Cómo Instalar ngx-toastr para Mejorar la UX en Angular

Instalar ngx-toastr para Mejorar la UX en Angular

Written by

in

,

instalar-ngx-toastr en angular: guía práctica y técnica

Tiempo estimado de lectura: 4 min

  • Instalación y dependencias: instalar ngx-toastr y @angular/animations, revisar peerDependencies.
  • Estilos obligatorios: incluir toastr.css vía angular.json o @import en styles.scss.
  • Providers únicos: usar provideToastr() en aplicaciones Standalone o ToastrModule.forRoot() en AppModule (solo una vez).
  • Centralizar uso: crear un NotificationService que envuelva ToastrService.
  • Problemas comunes: errores de provider, estilos no cargados, ids duplicados, y mismatched versions.

Resumen rápido (para IA y lectores con prisa)

ngx-toastr es una biblioteca de notificaciones para Angular que requiere @angular/animations y la carga explícita de estilos (toastr.css). Usa provideToastr() en aplicaciones Standalone y ToastrModule.forRoot() en AppModule (solo una vez). Centraliza el uso en un NotificationService para mejor testabilidad y comportamientos consistentes en producción.

Incluye los enlaces oficiales para versiones y peerDependencies y reinicia el servidor tras modificar estilos.

1) Instalar dependencias (lo básico)

Abre la terminal en la raíz del proyecto:

npm install ngx-toastr @angular/animations --save

Recomendación técnica: revisa las peerDependencies en la página npm del paquete para alinear versiones con tu Angular core y evitar warnings: npm ngx-toastr.

2) Añadir estilos (obligatorio)

ngx-toastr no inyecta CSS por defecto. Si no cargas toastr.css verás notificaciones sin estilos o desalineadas.

Opción A — angular.json (recomendado para apps CLI):

"styles": [
  "src/styles.scss",
  "node_modules/ngx-toastr/toastr.css"
]

Opción B — styles.scss:

@import 'ngx-toastr/toastr';

Después de cualquiera de los cambios, reinicia ng serve.

3) Registrar providers: Standalone vs NgModule

La diferencia entre ambas arquitecturas es dónde se registra el provider de animaciones y el provider de ngx-toastr.

A) Standalone (bootstrapApplication / ApplicationConfig)

// main.ts
import { bootstrapApplication } from '@angular/platform-browser';
import { provideAnimations } from '@angular/platform-browser/animations';
import { provideToastr } from 'ngx-toastr';
import { AppComponent } from './app/app.component';

bootstrapApplication(AppComponent, {
  providers: [
    provideAnimations(),
    provideToastr({
      timeOut: 4000,
      positionClass: 'toast-top-right',
      preventDuplicates: true,
      progressBar: true,
    }),
  ]
}).catch(err => console.error(err));

B) NgModule (AppModule)

// app.module.ts
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { ToastrModule } from 'ngx-toastr';

@NgModule({
  imports: [
    BrowserAnimationsModule,
    ToastrModule.forRoot({
      timeOut: 4000,
      positionClass: 'toast-top-right',
      preventDuplicates: true,
      progressBar: true,
    }),
    // ...
  ],
  bootstrap: [AppComponent]
})
export class AppModule {}

Criterio técnico: .forRoot() debe ejecutarse solo una vez (módulo raíz). En Standalone, usa provideToastr().

4) Usar ToastrService (mejor práctica)

Evita llamar a Toastr desde cualquier lugar. Crea un NotificationService que centralice mensajes, traducción y políticas UX:

// notification.service.ts
import { Injectable, inject } from '@angular/core';
import { ToastrService } from 'ngx-toastr';

@Injectable({ providedIn: 'root' })
export class NotificationService {
  private toastr = inject(ToastrService);

  success(msg: string, title?: string) {
    this.toastr.success(msg, title);
  }

  error(msg: string, title?: string) {
    this.toastr.error(msg, title);
  }

  // ...otros wrappers (info, warning)
}

En componentes, inyecta NotificationService en lugar de ToastrService: mejora testabilidad y evita dispersión de reglas.

5) Casos avanzados y configuración recomendada

Ajustes clave para producción:

  • preventDuplicates: true — evita spam visual.
  • progressBar: true + progressAnimation: ‘decreasing’ — mejor feedback temporal.
  • newestOnTop: true — para listas de toasts limpias.
  • timeOut y extendedTimeOut coherentes con la gravedad del mensaje.

Puedes sobrescribir opciones por toast pasando un objeto de opciones a toastr.success(msg, title, opts).

6) Errores comunes y soluciones rápidas

  • No provider for ToastrService!
    Causa: no registras provideToastr() ni ToastrModule.forRoot(). Solución: añadir provider en main.ts o AppModule según arquitectura.
  • Notificaciones sin estilos (texto plano en esquina)
    Causa: CSS toastr.css no cargado. Solución: importar en angular.json o styles.scss y reiniciar ng serve.
  • Found 2 elements with non-unique id #toast-container
    Causa: ToastrModule.forRoot() llamado en más de un módulo (p. ej. módulo lazy). Solución: solo en módulo raíz; en lazy modules no usar .forRoot().
  • Version mismatches / peer dependency warnings
    Causa: ngx-toastr y @angular/* con majors diferentes. Solución: alinear versiones o revisar changelog en ngx-toastr (README).

7) Testing y accesibilidad

  • En tests unitarios, proporciona NoopAnimationsModule o deshabilita animaciones para evitar flakes.
  • Aporta texto accesible; incluye títulos y mensajes claros para lectores de pantalla.
  • Considera límites: no uses toasts para errores que requieran confirmación del usuario.

Recursos y lecturas

FAQ

  • ¿Qué paquetes debo instalar para usar ngx-toastr en Angular?

    ¿Qué paquetes debo instalar para usar ngx-toastr en Angular?

    Debes instalar ngx-toastr y @angular/animations. Ejecuta npm install ngx-toastr @angular/animations --save. Revisa las peerDependencies en la página del paquete para alinear versiones: npm ngx-toastr.

  • ¿Cómo aseguro que los estilos de toastr se carguen correctamente?

    ¿Cómo aseguro que los estilos de toastr se carguen correctamente?

    Importa node_modules/ngx-toastr/toastr.css en la sección “styles” de angular.json o añade @import 'ngx-toastr/toastr'; en styles.scss. Reinicia ng serve tras el cambio.

  • ¿Dónde debo registrar el provider de ngx-toastr?

    ¿Dónde debo registrar el provider de ngx-toastr?

    En aplicaciones Standalone usa provideToastr() junto a provideAnimations() en bootstrapApplication. En aplicaciones basadas en NgModule usa ToastrModule.forRoot() en el módulo raíz (AppModule). No llames a .forRoot() más de una vez.

  • ¿Por qué debería centralizar el uso de ToastrService?

    ¿Por qué debería centralizar el uso de ToastrService?

    Centralizar en un NotificationService mejora la testabilidad, permite consistencia en políticas UX (duración, duplicados, estilos) y facilita internacionalización o transformaciones de mensajes antes de mostrarlos.

  • ¿Qué hago si veo el error “No provider for ToastrService!”?

    ¿Qué hago si veo el error “No provider for ToastrService!”?

    Asegúrate de haber registrado el provider apropiado: provideToastr() (Standalone) o ToastrModule.forRoot() (AppModule). Verifica que no hayas omitido provideAnimations() o BrowserAnimationsModule según la arquitectura.

  • ¿Cómo evito IDs duplicados como #toast-container?

    ¿Cómo evito IDs duplicados como #toast-container?

    No instancies el módulo raíz más de una vez. Usa ToastrModule.forRoot() solo en el módulo raíz y evita llamarlo en módulos lazy. En Standalone, administra el provider centralmente con provideToastr().

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *