How to create modal popup using Lightning Web Components

Salesforce Lightning Experience: Modal

  • Modals and popup boxes are used to display content in a layer above the app. This is used in cases such as the creation or editing of a record, as well as various types of messaging and wizards.

Modal/Popup using LWC in Salesforce looks like following image

modalLWC.js

  • LightningModal provides an .open() method that opens a modal and returns a promise that asynchronously resolves with the result of the user’s interaction with the modal.
  • The .open() method lets you assign values to the modal’s properties. LightningModal provides these properties.
  • label
  • size
  • description
  • disableClose
import { LightningElement } from 'lwc';

import MyModal from 'c/myModal';

export default class modalLWC extends LightningElement {

                    async handleClick(){

                        const result = await MyModal.open({

                            size: 'small',

                        });

                    }

}

modalLWC.html

The HTML template for this app contains a button that opens the modal.

<template>

                    <lightning-card title="Show Hide Modal Demo">

                        <lightning-button

                        class="slds-p-left_x-large"


                        onclick={handleClick}

                        label="Open My Modal"

                             ></lightning-button>

                    </lightning-card>


myModal.js

  • To create a modal component, import LightningModal from lightning/modal.
  • The component has access to the methods, and events of the  lightning/modal module.
import LightningModal from 'lightning/modal';

export default class MyModal extends LightningModal {
}

myModal.html

  • This HTML template contains the modal header, body and footer.
<template>

                    <lightning-modal-header label="LWC Modal"

        ></lightning-modal-header>

                    <lightning-modal-body>

                        <p>     <!-- Enter your Content Here -->      </p>

                    </lightning-modal-body>

                <lightning-modal-footer>

                        <lightning-button

                        variant="neutral"

                        label="Cancel"

                   onclick={handleCancel}

                class="slds-p-right_x-small"

                        ></lightning-button>

              </lightning-modal-footer>

        </template>