# <dialog> Development The **<dialog>** component is custom pop-up container for showing critical information or calling for an action. For details, see [dialog](../reference/arkui-js/js-components-container-dialog.md). ## Creating a <dialog> Component Create a **<dialog>** component in the .hml file under **pages/index** and add **<button>** components to trigger the **<dialog>**. The **<dialog>** component supports only the **width**, **height**, **margin**, **margin-[left|top|right|bottom]**, and **margin-[start|end]** styles. ```html
this is a dialog
``` ```css /* xxx.css */ .doc-page { width:100%; height:100%; 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; } ``` ```js // xxx.js export default { //Touch to open the dialog box. opendialog(){ this.$element('dialogId').show() }, } ``` ![en-us_image_0000001267767893](figures/en-us_image_0000001267767893.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. ```html
dialog
``` ```css /* xxx.css */ .doc-page { width:100%; height:100%; 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; } ``` ```js // xxx.js import promptAction from '@ohos.promptAction'; export default { canceldialog(e){ promptAction.showToast({ message: 'dialogCancel' }) }, opendialog(){ this.$element('dialogId').show() promptAction.showToast({ message: 'dialogShow' }) }, confirmClick(e) { this.$element('dialogId').close() promptAction.showToast({ message: 'dialogClose' }) }, } ``` ![en-us_image_0000001223287720](figures/en-us_image_0000001223287720.gif) > **NOTE** > > - This component supports only one child component. > > - Attributes and styles of a **<dialog>** component cannot be dynamically updated. > > - The **<dialog>** component does not support the **focusable** and **click-effect** attributes. ## Example Scenario Use the **<dialog>** component to implement a schedule. When the dialog box is open, use the [**<textarea>**](../reference/arkui-js/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. ```html
{{date}} events
{{date}} event {{$item.schedule}}
{{date}} New event
``` ```css /* 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; } ``` ```js // 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() } } ``` ![en-us_image_0000001223127756](figures/en-us_image_0000001223127756.gif)