Git Product home page Git Product logo

ngx-sweetalert2's Introduction

SweetAlert2

ngx-sweetalert2

Official SweetAlert2 integration for Angular 4+

npm version license npm total downloads npm legacy total downloads


This is not a regular API wrapper for SweetAlert (which already works very well alone), it intends to provide Angular-esque utilities on top of it.

๐Ÿ‘‰ Migrating from v2.x to v3.x? Read the release notes!

๐Ÿ‘‰ Before posting an issue, please check that the problem isn't on SweetAlert's side.



๐Ÿ“ฆ Installation & Usage

  1. Install ngx-sweetalert2 and sweetalert2 via the npm registry:
npm install --save sweetalert2 @toverux/ngx-sweetalert2

โซ Always upgrade SweetAlert2 when you upgrade ngx-sweetalert2. The latter is statically linked with SweetAlert2's type definitions.

  1. Import the module:
import { SweetAlert2Module } from '@toverux/ngx-sweetalert2';

@NgModule({
    //=> Basic usage
    imports: [SweetAlert2Module.forRoot()],

    //=> Or provide default SweetAlert2-native options
    //   (here, we make Swal more Bootstrap-friendly)
    imports: [
        SweetAlert2Module.forRoot({
            buttonsStyling: false,
            customClass: 'modal-content',
            confirmButtonClass: 'btn btn-primary',
            cancelButtonClass: 'btn'
        })
    ],

    //=> In submodules only:
    imports: [SweetAlert2Module]
})
export class AppModule {
}

๐Ÿ”— API

SwalDirective

Add the [swal] attribute to an element to show a simple modal when that element is clicked.

To define the modal contents, you can pass a SweetAlertOptions (provided by sweetalert2) object, or a simple array of strings, of format [title: string, text: string (, type: string)].

Simple dialog:

<button [swal]="['Oops!', 'This is not implemented yet :/', 'warning']">
  Do it!
</button>

More advanced (input in dialog, dismissal handling):

<button
  [swal]="{ title: 'Enter your email', input: 'email' }"
  (confirm)="saveEmail($event)"
  (cancel)="handleRefusalToSetEmail($event)">

  Set my e-mail address
</button>
export class MyComponent {
  public saveEmail(email: string): void {
    // ... save user email
  }

  public handleRefusalToSetEmail(dismissMethod: string): void {
    // dismissMethod can be 'cancel', 'overlay', 'close', and 'timer'
    // ... do something
  }
}

The directive can also take a reference to a <swal> component for more advanced use cases:

<button [swal]="deleteSwal" (confirm)="deleteFile(file)">
  Delete {{ file.name }}
</button>

<swal #deleteSwal ...></swal>

SwalComponent

The library also provides a component, that can be useful for advanced use cases, or when you [swal] has too much options.

The component also allows you to use Angular dynamic templates inside the SweetAlert (see the *swalPartial directive for that).

Simple example:

<swal
  #deleteSwal
  title="Delete {{ file.name }}?"
  text="This cannot be undone"
  type="question"
  [showCancelButton]="true"
  [focusCancel]="true"
  (confirm)="deleteFile(file)">
</swal>

With [swal]:
<button [swal]="deleteSwal">Delete {{ file.name }}</button>

Or DIY:
<button (click)="deleteSwal.show()">Delete {{ file.name }}</button>

You can access the dialog from your TypeScript code-behind like this:

class MyComponent {
  @ViewChild('deleteSwal') private deleteSwal: SwalComponent;
}

You can pass native SweetAlert2 options via the options input, just in case you need that:

<swal [options]="{ confirmButtonText: 'I understand' }"></swal>

You can catch other modal lifecycle events than (confirm) or (cancel):

<swal (beforeOpen)="onBeforeOpen($event)" (open)="onOpen($event)" (close)="onClose($event)"></swal>
public onBeforeOpen(event: BeforeOpenEvent): void {
  // You can access the modal's native DOM node:
  console.log(event.modalElement);
}

SwalPartialDirective

So you really want more, huh?

The *swalPartial directive lets you use Angular dynamic templates inside SweetAlerts. The directive will replace certain parts of the modal (aka. swal targets) with embedded Angular views.

This allows you to have data binding, use directives and components and benefit from the Angular template syntax like if the SweetAlert was a normal Angular component (it's not. at all).

<swal title="SweetAlert2 Timer">
  <div *swalPartial class="alert alert-info">
    <strong>{{ elapsedSeconds }}</strong> seconds elapsed since then.
  </div>
<swal>

The other cool thing about using a structural directive is that the modal's contents won't be instantiated before the modal is shown.

But, I want to use a template inside the modal's title. Your example only sets the main content.

You just have to change the target of the partial view (content is the default target). First, inject this service in your component:

export class MyComponent {
  public constructor(public readonly swalTargets: SwalPartialTargets) {
  }
}

And then, set the appropriate target as the value of *swalPartial.

<swal title="Fill the form, rapidly">
  <!-- This form will be displayed as the alert main content
       Targets the alert's main content zone by default -->
  <form *swalPartial [formControl]="myForm">
    ...
  </form>

  <!-- This targets the confirm button's inner content
       Notice the usage of ng-container to avoid creating an useless DOM element inside the button -->
  <ng-container *swalPartial="swalTargets.confirmButton">
    Send ({{ secondsLeft }} seconds left)
  </ng-container>
<swal>

We have the following targets: title, content, actions, confirmButton, cancelButton. These are provided by SweetAlert2.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.