customElements.define('modal-page', class extends HTMLElement {
connectedCallback() {
this.innerHTML = `
<ion-header>
<ion-toolbar>
<ion-title>Modal Header</ion-title>
<ion-buttons slot="primary">
<ion-button onClick="dismissModal()">
<ion-icon slot="icon-only" name="close"></ion-icon>
</ion-button>
</ion-buttons>
</ion-toolbar>
</ion-header>
<ion-content class="ion-padding">
Modal Content
</ion-content>`;
}
});
function presentModal() {
// create the modal with the `modal-page` component
const modalElement = document.createElement('ion-modal');
modalElement.component = 'modal-page';
// present the modal
document.body.appendChild(modalElement);
return modalElement.present();
}During creation of a modal, data can be passed in through the componentProps. The previous example can be written to include data:
const modalElement = document.createElement('ion-modal');
modalElement.component = 'modal-page';
modalElement.componentProps = {
'firstName': 'Douglas',
'lastName': 'Adams',
'middleInitial': 'N'
};To get the data passed into the componentProps, query for the modal in the modal-page:
customElements.define('modal-page', class extends HTMLElement {
connectedCallback() {
const modalElement = document.querySelector('ion-modal');
console.log(modalElement.componentProps.firstName);
...
}
}A modal can be dismissed by calling the dismiss method on the modal controller and optionally passing any data from the modal.
async function dismissModal() {
await modal.dismiss({
'dismissed': true
});
}After being dismissed, the data can be read in through the onWillDismiss or onDidDismiss attached to the modal after creation:
const { data } = await modalElement.onWillDismiss();
console.log(data);