# Dialog The **** component is custom pop-up container for showing critical information or calling for an action. For details, see [dialog](../js-reference/js-based-web-like-development-paradigm/js-components-container-dialog.md). ## Creating a Component Create a **** component in the **.hml** file under **pages/index** and add **** components to trigger the ****. The **** component supports only the **width**, **height**, **margin**, **margin-\[left|top|right|bottom\]**, and **margin-\[start|end\]** styles. ```
this is a dialog
``` ``` /* xxx.css */ .doc-page { flex-direction: column; align-items: center; justify-content: center; background-color: #F1F3F5; } .dialogClass{ width: 80%; height: 250px; margin-start: 1%; } .content{ width: 100%; height: 250px; justify-content: center; background-color: #e8ebec; border-radius: 20px; } text{ width: 100%; height: 100%; text-align: center; } button{ width: 70%; height: 60px; } ``` ``` /* xxx.js */ export default { //Touch to open the dialog box. openDialog(){ this.$element('dialogId').show() }, } ``` ![](figures/5-9.gif) ## Setting Dialog Box Response Add a **cancel** event that is triggered when a user touches a non-dialog area to cancel the pop-up dialog box. Add the **show** and **close** methods to display and close the dialog box, respectively. ```
dialog
``` ``` /* xxx.css */ .doc-page { flex-direction: column; align-items: center; justify-content: center; background-color: #F1F3F5; } .dialogClass{ width: 80%; height: 300px; margin-start: 1%; } .dialogDiv{ width: 100%; flex-direction: column; justify-content: center; align-self: center; } text{ height: 100px; align-self: center; } button{ align-self: center; margin-top: 20px; width: 60%; height: 80px; } ``` ``` /* xxx.js */ import prompt from '@system.prompt'; export default { openDialog(){ this.$element('dialogId').show() }, confirmClick(e) { this.$element('dialogId').close() prompt.showToast({ message: 'Confirmed.' }) }, } ``` ![](figures/38.gif) >![](../public_sys-resources/icon-note.gif) **NOTE:** >- This component supports only one child component. >- Attributes and styles of a **** component cannot be dynamically updated. >- The **** component does not support the **focusable** and **click-effect** attributes. ## Example Scenario Use the **** component to implement a schedule. When the dialog box is open, use the [****](../js-reference/js-based-web-like-development-paradigm/js-components-basic-textarea.md) component to add an event and touch the OK button to obtain the current time and save the input text. The events in the calendar are displayed in a list. ```
{{date}} events
{{date}} event {{$item.schedule}}
{{date}} New event
``` ``` /* xxx.css */ .doc-page { flex-direction: column; background-color: #F1F3F5; } .btndiv { width: 100%; height: 200px; flex-direction: column; align-items: center; justify-content: center; } .btn { radius:60px; font-size: 100px; background-color: #1E90FF; } .schedulediv { width: 100%; height: 200px; flex-direction: column; justify-content: space-around; padding-left: 55px; } .text1 { color: #000000; font-weight: bold; font-size: 39px; } .text2 { color: #a9a9a9; font-size: 30px; } .dialogdiv { flex-direction: column; align-items: center; } .innertxt { width: 320px; height: 160px; flex-direction: column; align-items: center; justify-content: space-around; } .text3 { font-family: serif; color: #1E90FF; font-size: 38px; } .text4 { color: #a9a9a9; font-size: 33px; } .area { width: 320px; border-bottom: 1px solid #1E90FF; } .innerbtn { width: 320px; height: 120px; justify-content: space-around; } .btntxt { text-color: #1E90FF; } ``` ``` /* xxx.js */ var info = null; import prompt from '@system.prompt'; import router from '@system.router'; export default { data: { curYear:'', curMonth:'', curDay:'', date:'', schedule:'', schedulelist:[] }, onInit() { // Obtain the current date. var date = new Date(); this.curYear = date.getFullYear(); this.curMonth = date.getMonth() + 1; this.curDay = date.getDate(); this.date = this.curYear + '-' + this.curMonth + '-' + this.curDay; this.schedulelist = [] }, addschedule(e) { this.$element('datedialog').show() }, canceldialog(e) { prompt.showToast({ message: 'Event setting canceled.' }) }, getschedule(e) { info = e.value }, cancelschedule(e) { this.$element('datedialog').close() prompt.showToast({ message: 'Event setting canceled.' }) }, // Touch OK to save the data. setschedule(e) { if (e.text === '') { this.schedule = info } else { this.schedule = info var addItem = {schedule: this.schedule,} this.schedulelist.push(addItem) } this.$element('datedialog').close() } } ``` ![](figures/6.gif)