ngx-toastr vs angular2-notifications vs angular-notifier
Angular Notification Libraries Comparison
1 Year
ngx-toastrangular2-notificationsangular-notifierSimilar Packages:
What's Angular Notification Libraries?

These libraries provide developers with tools to display notifications in Angular applications. They enhance user experience by delivering timely feedback and alerts, which can be crucial for user interactions, such as form submissions, errors, and confirmations. Each library offers unique features and customization options, making them suitable for different use cases in web applications.

Package Weekly Downloads Trend
Github Stars Ranking
Stat Detail
Package
Downloads
Stars
Size
Issues
Publish
License
ngx-toastr495,3022,540359 kB729 months agoMIT
angular2-notifications15,788748244 kB81a year agoMIT
angular-notifier9,9902471.28 MB402 years agoMIT
Feature Comparison: ngx-toastr vs angular2-notifications vs angular-notifier

Customization

  • ngx-toastr:

    ngx-toastr excels in customization, providing options for setting the position, duration, and styles of notifications. It supports custom CSS classes, allowing developers to create unique notification designs that fit their application's theme.

  • angular2-notifications:

    Angular2 Notifications offers extensive customization capabilities, including custom templates, animations, and the ability to define different styles for various notification types, giving developers more control over the appearance and behavior of notifications.

  • angular-notifier:

    Angular Notifier allows for basic customization options such as message types and durations, but it is primarily designed for simplicity and ease of use, making it less flexible compared to others.

Ease of Use

  • ngx-toastr:

    ngx-toastr is also easy to use, with a simple API for displaying notifications. It requires minimal setup and is well-documented, making it accessible for developers of all skill levels.

  • angular2-notifications:

    Angular2 Notifications has a moderate learning curve, requiring some configuration to utilize its full potential, but it provides comprehensive documentation to help developers understand its features and usage.

  • angular-notifier:

    Angular Notifier is designed to be user-friendly, with a straightforward API that allows developers to implement notifications quickly without extensive setup, making it ideal for projects that require fast integration.

Animation Support

  • ngx-toastr:

    ngx-toastr includes built-in animations for showing and hiding notifications, with customizable effects that can be tailored to match the application's design, providing a polished user experience.

  • angular2-notifications:

    Angular2 Notifications offers a variety of animation options for displaying and dismissing notifications, allowing developers to create visually appealing transitions that enhance user engagement.

  • angular-notifier:

    Angular Notifier provides basic animation support for notifications, but it is limited in terms of transition effects and customization, focusing more on functionality than aesthetics.

Notification Types

  • ngx-toastr:

    ngx-toastr primarily focuses on toast notifications, providing success, error, info, and warning types, which can be easily displayed with minimal configuration, making it suitable for various notification scenarios.

  • angular2-notifications:

    Angular2 Notifications supports a wide range of notification types, including success, error, info, and warning, allowing developers to categorize messages effectively and improve user understanding of alerts.

  • angular-notifier:

    Angular Notifier supports basic notification types, such as success and error messages, but is not as versatile in handling multiple notification categories compared to others.

Community and Support

  • ngx-toastr:

    ngx-toastr benefits from a large and active community, providing extensive documentation, tutorials, and community support, which can be invaluable for troubleshooting and learning best practices.

  • angular2-notifications:

    Angular2 Notifications has a moderate community presence, with decent documentation and support available, making it easier for developers to find help and resources when needed.

  • angular-notifier:

    Angular Notifier has a smaller community compared to the others, which may result in limited resources and third-party integrations, but it is actively maintained and documented.

How to Choose: ngx-toastr vs angular2-notifications vs angular-notifier
  • ngx-toastr:

    Select ngx-toastr if you prefer a lightweight, highly customizable toast notification library that allows for easy configuration of duration, position, and styling, suitable for applications that need quick, unobtrusive notifications.

  • angular2-notifications:

    Opt for Angular2 Notifications if you require a more feature-rich solution that supports various types of notifications (like success, error, info) and offers customizable templates, animations, and positioning options for a more tailored user experience.

  • angular-notifier:

    Choose Angular Notifier if you need a simple and easy-to-use notification system that integrates seamlessly with Angular's reactive forms and provides a straightforward API for displaying notifications without complex configurations.

README for ngx-toastr
Angular Toastr

ngx-toastr


npm codecov

DEMO: https://ngx-toastr.vercel.app

Features

  • Toast Component Injection without being passed ViewContainerRef
  • No use of *ngFor. Fewer dirty checks and higher performance.
  • AoT compilation and lazy loading compatible
  • Component inheritance for custom toasts
  • SystemJS/UMD rollup bundle
  • Animations using Angular's Web Animations API
  • Output toasts to an optional target directive

Dependencies

Latest version available for each version of Angular

| ngx-toastr | Angular | | ---------- | ----------- | | 13.2.1 | 10.x 11.x | | 14.3.0 | 12.x 13.x | | 15.2.2 | 14.x. | | 16.2.0 | 15.x | | 17.0.2 | 16.x | | current | >= 17.x |

Install

npm install ngx-toastr --save

@angular/animations package is a required dependency for the default toast

npm install @angular/animations --save

Don't want to use @angular/animations? See Setup Without Animations.

Setup

step 1: add css

  • copy toast css to your project.
  • If you are using sass you can import the css.
// regular style toast
@import 'ngx-toastr/toastr';

// bootstrap style toast
// or import a bootstrap 4 alert styled design (SASS ONLY)
// should be after your bootstrap imports, it uses bs4 variables, mixins, functions
@import 'ngx-toastr/toastr-bs4-alert';

// if you'd like to use it without importing all of bootstrap it requires
@import 'bootstrap/scss/functions';
@import 'bootstrap/scss/variables';
@import 'bootstrap/scss/mixins';
// bootstrap 4
@import 'ngx-toastr/toastr-bs4-alert';
// boostrap 5
@import 'ngx-toastr/toastr-bs5-alert';
  • If you are using angular-cli you can add it to your angular.json
"styles": [
  "styles.scss",
  "node_modules/ngx-toastr/toastr.css" // try adding '../' if you're using angular cli before 6
]

step 2: add ToastrModule to app NgModule, or provideToastr to providers, make sure you have BrowserAnimationsModule (or provideAnimations) as well.

  • Module based
import { CommonModule } from '@angular/common';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';

import { ToastrModule } from 'ngx-toastr';

@NgModule({
  imports: [
    CommonModule,
    BrowserAnimationsModule, // required animations module
    ToastrModule.forRoot(), // ToastrModule added
  ],
  bootstrap: [App],
  declarations: [App],
})
class MainModule {}
  • Standalone
import { AppComponent } from './src/app.component';
import { provideAnimations } from '@angular/platform-browser/animations';

import { provideToastr } from 'ngx-toastr';

bootstrapApplication(AppComponent, {
  providers: [
    provideAnimations(), // required animations providers
    provideToastr(), // Toastr providers
  ]
});

Use

import { ToastrService } from 'ngx-toastr';

@Component({...})
export class YourComponent {
  constructor(private toastr: ToastrService) {}

  showSuccess() {
    this.toastr.success('Hello world!', 'Toastr fun!');
  }
}

Options

There are individual options and global options.

Individual Options

Passed to ToastrService.success/error/warning/info/show()

| Option | Type | Default | Description
| ----------------- | ------------------------------ | ------------------------------ | ------------------------------------------------- | | toastComponent | Component | Toast | Angular component that will be used | | closeButton | boolean | false | Show close button | | timeOut | number | 5000 | Time to live in milliseconds | | extendedTimeOut | number | 1000 | Time to close after a user hovers over toast | | disableTimeOut | boolean \| 'timeOut' \| 'extendedTimeOut' | false | Disable both timeOut and extendedTimeOut when set to true. Allows specifying which timeOut to disable, either: timeOut or extendedTimeOut | | easing | string | 'ease-in' | Toast component easing | | easeTime | string | number | 300 | Time spent easing | | enableHtml | boolean | false | Allow html in message | | newestOnTop | boolean | true | New toast placement | | progressBar | boolean | false | Show progress bar | | progressAnimation | 'decreasing' \| 'increasing' | 'decreasing' | Changes the animation of the progress bar. | | toastClass | string | 'ngx-toastr' | CSS class(es) for toast | | positionClass | string | 'toast-top-right' | CSS class(es) for toast container | | titleClass | string | 'toast-title' | CSS class(es) for inside toast on title | | messageClass | string | 'toast-message' | CSS class(es) for inside toast on message | | tapToDismiss | boolean | true | Close on click | | onActivateTick | boolean | false | Fires changeDetectorRef.detectChanges() when activated. Helps show toast from asynchronous events outside of Angular's change detection |

Setting Individual Options

success, error, info, warning take (message, title, ToastConfig) pass an options object to replace any default option.

this.toastrService.error('everything is broken', 'Major Error', {
  timeOut: 3000,
});

Global Options

All individual options can be overridden in the global options to affect all toasts. In addition, global options include the following options:

| Option | Type | Default | Description | | ----------------------- | ------- | ---------------------------------- | ------------------------------------------------------------------ | | maxOpened | number | 0 | Max toasts opened. Toasts will be queued. 0 is unlimited | | autoDismiss | boolean | false | Dismiss current toast when max is reached | | iconClasses | object | see below | Classes used on toastr service methods | | preventDuplicates | boolean | false | Block duplicate messages | | countDuplicates | boolean | false | Displays a duplicates counter (preventDuplicates must be true). Toast must have a title and duplicate message | | resetTimeoutOnDuplicate | boolean | false | Reset toast timeout on duplicate (preventDuplicates must be true) | | includeTitleDuplicates | boolean | false | Include the title of a toast when checking for duplicates (by default only message is compared) |

iconClasses defaults
iconClasses = {
  error: 'toast-error',
  info: 'toast-info',
  success: 'toast-success',
  warning: 'toast-warning',
};

Setting Global Options

Pass values to ToastrModule.forRoot() or provideToastr() to set global options.

  • Module based
// root app NgModule
imports: [
  ToastrModule.forRoot({
    timeOut: 10000,
    positionClass: 'toast-bottom-right',
    preventDuplicates: true,
  }),
],
  • Standalone
import { AppComponent } from './src/app.component';
import { provideAnimations } from '@angular/platform-browser/animations';

import { provideToastr } from 'ngx-toastr';

bootstrapApplication(AppComponent, {
  providers: [
    provideToastr({
      timeOut: 10000,
      positionClass: 'toast-bottom-right',
      preventDuplicates: true,
    }), 
  ]
});

Toastr Service methods return:

export interface ActiveToast {
  /** Your Toast ID. Use this to close it individually */
  toastId: number;
  /** the title of your toast. Stored to prevent duplicates if includeTitleDuplicates set */
  title: string;
  /** the message of your toast. Stored to prevent duplicates */
  message: string;
  /** a reference to the component see portal.ts */
  portal: ComponentRef<any>;
  /** a reference to your toast */
  toastRef: ToastRef<any>;
  /** triggered when toast is active */
  onShown: Observable<any>;
  /** triggered when toast is destroyed */
  onHidden: Observable<any>;
  /** triggered on toast click */
  onTap: Observable<any>;
  /** available for your use in custom toast */
  onAction: Observable<any>;
}

Put toasts in your own container

Put toasts in a specific div inside your application. This should probably be somewhere that doesn't get deleted. Add ToastContainerModule to the ngModule where you need the directive available. Make sure that your container has an aria-live="polite" attribute, so that any time a toast is injected into the container it is announced by screen readers.

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';

import { ToastrModule, ToastContainerModule } from 'ngx-toastr';

import { AppComponent } from './app.component';

@NgModule({
  declarations: [AppComponent],
  imports: [
    BrowserModule,
    BrowserAnimationsModule,

    ToastrModule.forRoot({ positionClass: 'inline' }),
    ToastContainerModule,
  ],
  providers: [],
  bootstrap: [AppComponent],
})
export class AppModule {}

Add a div with toastContainer directive on it.

import { Component, OnInit, ViewChild } from '@angular/core';

import { ToastContainerDirective, ToastrService } from 'ngx-toastr';

@Component({
  selector: 'app-root',
  template: `
    <h1><a (click)="onClick()">Click</a></h1>
    <div aria-live="polite" toastContainer></div>
  `,
})
export class AppComponent implements OnInit {
  @ViewChild(ToastContainerDirective, { static: true })
  toastContainer: ToastContainerDirective;

  constructor(private toastrService: ToastrService) {}
  ngOnInit() {
    this.toastrService.overlayContainer = this.toastContainer;
  }
  onClick() {
    this.toastrService.success('in div');
  }
}

Functions

Clear

Remove all or a single toast by optional id

toastrService.clear(toastId?: number);
Remove

Remove and destroy a single toast by id

toastrService.remove(toastId: number);

SystemJS

If you are using SystemJS, you should also adjust your configuration to point to the UMD bundle.

In your SystemJS config file, map needs to tell the System loader where to look for ngx-toastr:

map: {
  'ngx-toastr': 'node_modules/ngx-toastr/bundles/ngx-toastr.umd.min.js',
}

Setup Without Animations

If you do not want to include @angular/animations in your project you can override the default toast component in the global config to use ToastNoAnimation instead of the default one.

In your main module (ex: app.module.ts)

import { ToastrModule, ToastNoAnimation, ToastNoAnimationModule } from 'ngx-toastr';

@NgModule({
  imports: [
    // ...

    // BrowserAnimationsModule no longer required
    ToastNoAnimationModule.forRoot(),
  ],
  // ...
})
class AppModule {}

That's it! Animations are no longer required.

Using A Custom Toast

Create your toast component extending Toast see the demo's pink toast for an example https://github.com/scttcper/ngx-toastr/blob/master/src/app/pink.toast.ts

import { ToastrModule } from 'ngx-toastr';

@NgModule({
  imports: [
    ToastrModule.forRoot({
      toastComponent: YourToastComponent, // added custom toast!
    }),
  ],
  bootstrap: [App],
  declarations: [App, YourToastComponent], // add!
})
class AppModule {}

FAQ

  1. ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked
    When opening a toast inside an angular lifecycle wrap it in setTimeout
ngOnInit() {
    setTimeout(() => this.toastr.success('sup'))
}
  1. Change default icons (check, warning sign, etc)
    Overwrite the css background-image: https://github.com/scttcper/ngx-toastr/blob/master/src/lib/toastr.css.
  2. How do I use this in an ErrorHandler?
    See: https://github.com/scttcper/ngx-toastr/issues/179.
  3. How can I translate messages?
    See: https://github.com/scttcper/ngx-toastr/issues/201.
  4. How to handle toastr click/tap action?
    showToaster() {
      this.toastr.success('Hello world!', 'Toastr fun!')
        .onTap
        .pipe(take(1))
        .subscribe(() => this.toasterClickedHandler());
    }
    
    toasterClickedHandler() {
      console.log('Toastr clicked');
    }
    
  5. How to customize styling without overridding defaults?
    Add multiple CSS classes separated by a space:
    toastClass: 'yourclass ngx-toastr'
    
    See: https://github.com/scttcper/ngx-toastr/issues/594.

Previous Works

toastr original toastr
angular-toastr AngularJS toastr
notyf notyf (css)

License

MIT


GitHub @scttcper  ·  Twitter @scttcper