ngx-toastr

🍞 Angular Toastr

Github星跟蹤圖

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, ----------, -----------, 6.5.0, 4.x, 8.10.2, 5.x, 10.1.0, 8.x 7.x 6.x, 11.3.3, 8.x, 12.1.0, 9.x, current, >= 10.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';
@import '~ngx-toastr/toastr-bs4-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, make sure you have BrowserAnimationsModule as well

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 {}

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, progressBar, boolean, false, Show progress bar, progressAnimation, 'decreasing' \, 'increasing', 'decreasing', Changes the animation of the progress bar., toastClass, string, 'ngx-toastr', Class on toast, positionClass, string, 'toast-top-right', Class on toast container, titleClass, string, 'toast-title', Class inside toast on title, messageClass, string, 'toast-message', Class 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, 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, newestOnTop, boolean, true, New toast placement, 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()

// root app NgModule
imports: [
  ToastrModule.forRoot({
    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.

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 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!
    }),
  ],
  entryComponents: [YourToastComponent], // add!
  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');
}

Previous Works

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

License

MIT


GitHub @scttcper  · 
Twitter @scttcper

主要指標

概覽
名稱與所有者scttcper/ngx-toastr
主編程語言TypeScript
編程語言TypeScript (語言數: 5)
平台
許可證MIT License
所有者活动
創建於2016-07-28 17:19:43
推送於2024-08-27 21:04:27
最后一次提交2024-08-27 17:04:26
發布數147
最新版本名稱v19.0.0 (發布於 )
第一版名稱0.1.0 (發布於 )
用户参与
星數2.6k
關注者數29
派生數358
提交數1k
已啟用問題?
問題數532
打開的問題數71
拉請求數333
打開的拉請求數4
關閉的拉請求數164
项目设置
已啟用Wiki?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?