共通モーダル画面作成方法説明
-
共通モーダルはモーダルを開くための API を持ち、他のコンポーネントから呼び出すことができます。
-
他のコンポーネントで、共通モーダル画面を表示するための API を呼び出します。この API は、共通モーダル画面を表示するために必要なデータを受け取ります。
-
共通モーダル画面のコンポーネントは、受け取ったデータを使用して、モーダルを表示します。
-
共通モーダル画面のコンポーネントは、モーダルを閉じるための API を持ち、他のコンポーネントから呼び出すことができます。
-
他のコンポーネントで、共通モーダル画面を閉じるための API を呼び出します。
実装例
構成図:
modal
.slds-modal__content.slds-p-around_medium {
text-align: center !important;
}
<template>
<!--Use template if:true to display/hide popup based on isModalOpen value-->
<template if:true="{_isModalOpen}">
<!-- Modal/Popup Box LWC starts here -->
<section
role="dialog"
tabindex="-1"
aria-labelledby="modal-heading-01"
aria-modal="true"
class="slds-modal slds-fade-in-open"
>
<div class="slds-modal__container">
<!-- Modal/Popup Box LWC header here -->
<header class="slds-modal__header">
<button
class="slds-button slds-button_icon slds-modal__close slds-button_icon-inverse"
title="Close"
onclick="{closeModal}"
>
<lightning-icon
icon-name="utility:close"
alternative-text="close"
variant="inverse"
size="small"
></lightning-icon>
<span class="slds-assistive-text">Close</span>
</button>
<h2 class="slds-text-heading_medium slds-hyphenate">{title}</h2>
</header>
<!-- Modal/Popup Box LWC body starts here -->
<div class="slds-modal__content slds-p-around_medium">
<lightning-formatted-rich-text
value="{content}"
></lightning-formatted-rich-text>
</div>
<!-- Modal/Popup Box LWC footer starts here -->
<footer class="slds-modal__footer">
<button
class="slds-button slds-button_neutral"
onclick="{closeModal}"
>
いいえ
</button>
<button
class="slds-button slds-button_brand"
onclick="{confirmHandle}"
>
はい
</button>
</footer>
</div>
</section>
<div class="slds-backdrop slds-backdrop_open"></div>
</template>
</template>
import { LightningElement, track, api } from "lwc";
export default class Modal extends LightningElement {
@api name;
//表示フラグ
@track _isModalOpen;
//タイトル
@track _title;
//コンテンツ
@track _content;
@api
openModal() {
this._isModalOpen = true;
}
/**
* クローズ
*/
closeModal(e) {
e.preventDefault();
this._isModalOpen = false;
let changenEvent = new CustomEvent("confirm", {
detail: false,
composed: true,
bubbles: true,
cancelable: true,
});
this.dispatchEvent(changenEvent);
}
/**
* 「はい」ボタン押下
*/
confirmHandle(e) {
e.preventDefault();
this._isModalOpen = false;
let changenEvent = new CustomEvent("confirm", {
detail: true,
composed: true,
bubbles: true,
cancelable: true,
});
this.dispatchEvent(changenEvent);
}
@api
get title() {
return this._title;
}
set title(val) {
this._title = val;
}
@api
get content() {
return this._content;
}
set content(val) {
this._content = val;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
<apiVersion>52</apiVersion>
<isExposed>false</isExposed>
</LightningComponentBundle>