1e41f4b71Sopenharmony_ci# <dialog> Development 2e41f4b71Sopenharmony_ci 3e41f4b71Sopenharmony_ci 4e41f4b71Sopenharmony_ciThe **<dialog>** component is custom pop-up container for showing critical information or calling for an action. For details, see [dialog](../reference/apis-arkui/arkui-js/js-components-container-dialog.md). 5e41f4b71Sopenharmony_ci 6e41f4b71Sopenharmony_ci 7e41f4b71Sopenharmony_ci## Creating a <dialog> Component 8e41f4b71Sopenharmony_ci 9e41f4b71Sopenharmony_ciCreate 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. 10e41f4b71Sopenharmony_ci 11e41f4b71Sopenharmony_ci```html 12e41f4b71Sopenharmony_ci<!-- xxx.hml --> 13e41f4b71Sopenharmony_ci<div class="doc-page"> 14e41f4b71Sopenharmony_ci <dialog class="dialogClass" id="dialogId" dragable="true"> 15e41f4b71Sopenharmony_ci <div class="content"> 16e41f4b71Sopenharmony_ci <text>this is a dialog</text> 17e41f4b71Sopenharmony_ci </div> 18e41f4b71Sopenharmony_ci </dialog> 19e41f4b71Sopenharmony_ci <button value="click me" onclick="opendialog"></button> 20e41f4b71Sopenharmony_ci</div> 21e41f4b71Sopenharmony_ci``` 22e41f4b71Sopenharmony_ci 23e41f4b71Sopenharmony_ci```css 24e41f4b71Sopenharmony_ci/* xxx.css */ 25e41f4b71Sopenharmony_ci.doc-page { 26e41f4b71Sopenharmony_ci width:100%; 27e41f4b71Sopenharmony_ci height:100%; 28e41f4b71Sopenharmony_ci flex-direction: column; 29e41f4b71Sopenharmony_ci align-items: center; 30e41f4b71Sopenharmony_ci justify-content: center; 31e41f4b71Sopenharmony_ci background-color: #F1F3F5; 32e41f4b71Sopenharmony_ci} 33e41f4b71Sopenharmony_ci.dialogClass{ 34e41f4b71Sopenharmony_ci width: 80%; 35e41f4b71Sopenharmony_ci height: 250px; 36e41f4b71Sopenharmony_ci margin-start: 1%; 37e41f4b71Sopenharmony_ci} 38e41f4b71Sopenharmony_ci.content{ 39e41f4b71Sopenharmony_ci width: 100%; 40e41f4b71Sopenharmony_ci height: 250px; 41e41f4b71Sopenharmony_ci justify-content: center; 42e41f4b71Sopenharmony_ci background-color: #e8ebec; 43e41f4b71Sopenharmony_ci border-radius: 20px; 44e41f4b71Sopenharmony_ci} 45e41f4b71Sopenharmony_citext{ 46e41f4b71Sopenharmony_ci width: 100%; 47e41f4b71Sopenharmony_ci height: 100%; 48e41f4b71Sopenharmony_ci text-align: center; 49e41f4b71Sopenharmony_ci} 50e41f4b71Sopenharmony_cibutton{ 51e41f4b71Sopenharmony_ci width: 70%; 52e41f4b71Sopenharmony_ci height: 60px; 53e41f4b71Sopenharmony_ci} 54e41f4b71Sopenharmony_ci``` 55e41f4b71Sopenharmony_ci 56e41f4b71Sopenharmony_ci```js 57e41f4b71Sopenharmony_ci// xxx.js 58e41f4b71Sopenharmony_ciexport default { 59e41f4b71Sopenharmony_ci //Touch to open the dialog box. 60e41f4b71Sopenharmony_ci opendialog(){ 61e41f4b71Sopenharmony_ci this.$element('dialogId').show() 62e41f4b71Sopenharmony_ci }, 63e41f4b71Sopenharmony_ci} 64e41f4b71Sopenharmony_ci``` 65e41f4b71Sopenharmony_ci 66e41f4b71Sopenharmony_ci 67e41f4b71Sopenharmony_ci 68e41f4b71Sopenharmony_ci 69e41f4b71Sopenharmony_ci## Setting Dialog Box Response 70e41f4b71Sopenharmony_ci 71e41f4b71Sopenharmony_ciAdd 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. 72e41f4b71Sopenharmony_ci 73e41f4b71Sopenharmony_ci 74e41f4b71Sopenharmony_ci```html 75e41f4b71Sopenharmony_ci<!-- xxx.hml --> 76e41f4b71Sopenharmony_ci<div class="doc-page"> 77e41f4b71Sopenharmony_ci <dialog class="dialogClass" id="dialogId" oncancel="canceldialog"> 78e41f4b71Sopenharmony_ci <div class="dialogDiv"> 79e41f4b71Sopenharmony_ci <text>dialog</text> 80e41f4b71Sopenharmony_ci <button value="confirm" onclick="confirmClick"></button> 81e41f4b71Sopenharmony_ci </div> 82e41f4b71Sopenharmony_ci </dialog> 83e41f4b71Sopenharmony_ci <button value="click me" onclick="opendialog"></button> 84e41f4b71Sopenharmony_ci</div> 85e41f4b71Sopenharmony_ci``` 86e41f4b71Sopenharmony_ci 87e41f4b71Sopenharmony_ci 88e41f4b71Sopenharmony_ci```css 89e41f4b71Sopenharmony_ci/* xxx.css */ 90e41f4b71Sopenharmony_ci.doc-page { 91e41f4b71Sopenharmony_ci width:100%; 92e41f4b71Sopenharmony_ci height:100%; 93e41f4b71Sopenharmony_ci flex-direction: column; 94e41f4b71Sopenharmony_ci align-items: center; 95e41f4b71Sopenharmony_ci justify-content: center; 96e41f4b71Sopenharmony_ci background-color: #F1F3F5; 97e41f4b71Sopenharmony_ci} 98e41f4b71Sopenharmony_ci.dialogClass{ 99e41f4b71Sopenharmony_ci width: 80%; 100e41f4b71Sopenharmony_ci height: 300px; 101e41f4b71Sopenharmony_ci margin-start: 1%; 102e41f4b71Sopenharmony_ci} 103e41f4b71Sopenharmony_ci.dialogDiv{ 104e41f4b71Sopenharmony_ci width: 100%; 105e41f4b71Sopenharmony_ci flex-direction: column; 106e41f4b71Sopenharmony_ci justify-content: center; 107e41f4b71Sopenharmony_ci align-self: center; 108e41f4b71Sopenharmony_ci} 109e41f4b71Sopenharmony_citext{ 110e41f4b71Sopenharmony_ci height: 100px; 111e41f4b71Sopenharmony_ci align-self: center; 112e41f4b71Sopenharmony_ci} 113e41f4b71Sopenharmony_cibutton{ 114e41f4b71Sopenharmony_ci align-self: center; 115e41f4b71Sopenharmony_ci margin-top: 20px; 116e41f4b71Sopenharmony_ci width: 60%; 117e41f4b71Sopenharmony_ci height: 80px; 118e41f4b71Sopenharmony_ci} 119e41f4b71Sopenharmony_ci``` 120e41f4b71Sopenharmony_ci 121e41f4b71Sopenharmony_ci 122e41f4b71Sopenharmony_ci```js 123e41f4b71Sopenharmony_ci// xxx.js 124e41f4b71Sopenharmony_ciimport promptAction from '@ohos.promptAction'; 125e41f4b71Sopenharmony_ciexport default { 126e41f4b71Sopenharmony_ci canceldialog(e){ 127e41f4b71Sopenharmony_ci promptAction.showToast({ 128e41f4b71Sopenharmony_ci message: 'dialogCancel' 129e41f4b71Sopenharmony_ci }) 130e41f4b71Sopenharmony_ci }, 131e41f4b71Sopenharmony_ci opendialog(){ 132e41f4b71Sopenharmony_ci this.$element('dialogId').show() 133e41f4b71Sopenharmony_ci promptAction.showToast({ 134e41f4b71Sopenharmony_ci message: 'dialogShow' 135e41f4b71Sopenharmony_ci }) 136e41f4b71Sopenharmony_ci }, 137e41f4b71Sopenharmony_ci confirmClick(e) { 138e41f4b71Sopenharmony_ci this.$element('dialogId').close() 139e41f4b71Sopenharmony_ci promptAction.showToast({ 140e41f4b71Sopenharmony_ci message: 'dialogClose' 141e41f4b71Sopenharmony_ci }) 142e41f4b71Sopenharmony_ci }, 143e41f4b71Sopenharmony_ci} 144e41f4b71Sopenharmony_ci``` 145e41f4b71Sopenharmony_ci 146e41f4b71Sopenharmony_ci 147e41f4b71Sopenharmony_ci 148e41f4b71Sopenharmony_ci 149e41f4b71Sopenharmony_ci 150e41f4b71Sopenharmony_ci> **NOTE** 151e41f4b71Sopenharmony_ci> 152e41f4b71Sopenharmony_ci> - This component supports only one child component. 153e41f4b71Sopenharmony_ci> 154e41f4b71Sopenharmony_ci> - Attributes and styles of a **<dialog>** component cannot be dynamically updated. 155e41f4b71Sopenharmony_ci> 156e41f4b71Sopenharmony_ci> - The **<dialog>** component does not support the **focusable** and **click-effect** attributes. 157e41f4b71Sopenharmony_ci 158e41f4b71Sopenharmony_ci 159e41f4b71Sopenharmony_ci## Example Scenario 160e41f4b71Sopenharmony_ci 161e41f4b71Sopenharmony_ci 162e41f4b71Sopenharmony_ciUse the **<dialog>** component to implement a schedule. When the dialog box is open, use the [<textarea>](../reference/apis-arkui/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. 163e41f4b71Sopenharmony_ci 164e41f4b71Sopenharmony_ci 165e41f4b71Sopenharmony_ci```html 166e41f4b71Sopenharmony_ci<!-- xxx.hml --> 167e41f4b71Sopenharmony_ci<div class="doc-page"> 168e41f4b71Sopenharmony_ci <text style="margin-top: 60px;margin-left: 30px;"> 169e41f4b71Sopenharmony_ci <span>{{date}} events</span> 170e41f4b71Sopenharmony_ci </text> 171e41f4b71Sopenharmony_ci <div class="btndiv"> 172e41f4b71Sopenharmony_ci <button type="circle" class="btn" onclick="addschedule">+</button> 173e41f4b71Sopenharmony_ci </div> 174e41f4b71Sopenharmony_ci<!-- for Render events data --> 175e41f4b71Sopenharmony_ci <list style="width: 100%;"> 176e41f4b71Sopenharmony_ci <list-item type="item" for="schedulelist" style="width:100%;height: 200px;"> 177e41f4b71Sopenharmony_ci <div class="schedulediv"> 178e41f4b71Sopenharmony_ci <text class="text1">{{date}} event</text> 179e41f4b71Sopenharmony_ci <text class="text2">{{$item.schedule}}</text> 180e41f4b71Sopenharmony_ci </div> 181e41f4b71Sopenharmony_ci </list-item> 182e41f4b71Sopenharmony_ci </list> 183e41f4b71Sopenharmony_ci <dialog id="datedialog" oncancel="canceldialog" > 184e41f4b71Sopenharmony_ci <div class="dialogdiv"> 185e41f4b71Sopenharmony_ci <div class="innertxt"> 186e41f4b71Sopenharmony_ci <text class="text3">{{date}}</text> 187e41f4b71Sopenharmony_ci <text class="text4">New event</text> 188e41f4b71Sopenharmony_ci </div> 189e41f4b71Sopenharmony_ci <textarea placeholder="Event information" onchange="getschedule" class="area" extend="true"></textarea> 190e41f4b71Sopenharmony_ci <div class="innerbtn"> 191e41f4b71Sopenharmony_ci <button type="text" value="Cancel" onclick="cancelschedule" class="btntxt"></button> 192e41f4b71Sopenharmony_ci <button type="text" value="OK" onclick="setschedule" class="btntxt"></button> 193e41f4b71Sopenharmony_ci </div> 194e41f4b71Sopenharmony_ci </div> 195e41f4b71Sopenharmony_ci </dialog> 196e41f4b71Sopenharmony_ci</div> 197e41f4b71Sopenharmony_ci``` 198e41f4b71Sopenharmony_ci 199e41f4b71Sopenharmony_ci 200e41f4b71Sopenharmony_ci```css 201e41f4b71Sopenharmony_ci/* xxx.css */ 202e41f4b71Sopenharmony_ci.doc-page { 203e41f4b71Sopenharmony_ci flex-direction: column; 204e41f4b71Sopenharmony_ci background-color: #F1F3F5; 205e41f4b71Sopenharmony_ci} 206e41f4b71Sopenharmony_ci.btndiv { 207e41f4b71Sopenharmony_ci width: 100%; 208e41f4b71Sopenharmony_ci height: 200px; 209e41f4b71Sopenharmony_ci flex-direction: column; 210e41f4b71Sopenharmony_ci align-items: center; 211e41f4b71Sopenharmony_ci justify-content: center; 212e41f4b71Sopenharmony_ci} 213e41f4b71Sopenharmony_ci.btn { 214e41f4b71Sopenharmony_ci radius:60px; 215e41f4b71Sopenharmony_ci font-size: 100px; 216e41f4b71Sopenharmony_ci background-color: #1E90FF; 217e41f4b71Sopenharmony_ci} 218e41f4b71Sopenharmony_ci.schedulediv { 219e41f4b71Sopenharmony_ci width: 100%; 220e41f4b71Sopenharmony_ci height: 200px; 221e41f4b71Sopenharmony_ci flex-direction: column; 222e41f4b71Sopenharmony_ci justify-content: space-around; 223e41f4b71Sopenharmony_ci padding-left: 55px; 224e41f4b71Sopenharmony_ci} 225e41f4b71Sopenharmony_ci.text1 { 226e41f4b71Sopenharmony_ci color: #000000; 227e41f4b71Sopenharmony_ci font-weight: bold; 228e41f4b71Sopenharmony_ci font-size: 39px; 229e41f4b71Sopenharmony_ci} 230e41f4b71Sopenharmony_ci.text2 { 231e41f4b71Sopenharmony_ci color: #a9a9a9; 232e41f4b71Sopenharmony_ci font-size: 30px; 233e41f4b71Sopenharmony_ci} 234e41f4b71Sopenharmony_ci.dialogdiv { 235e41f4b71Sopenharmony_ci flex-direction: column; 236e41f4b71Sopenharmony_ci align-items: center; 237e41f4b71Sopenharmony_ci} 238e41f4b71Sopenharmony_ci.innertxt { 239e41f4b71Sopenharmony_ci width: 320px; 240e41f4b71Sopenharmony_ci height: 160px; 241e41f4b71Sopenharmony_ci flex-direction: column; 242e41f4b71Sopenharmony_ci align-items: center; 243e41f4b71Sopenharmony_ci justify-content: space-around; 244e41f4b71Sopenharmony_ci} 245e41f4b71Sopenharmony_ci.text3 { 246e41f4b71Sopenharmony_ci font-family: serif; 247e41f4b71Sopenharmony_ci color: #1E90FF; 248e41f4b71Sopenharmony_ci font-size: 38px; 249e41f4b71Sopenharmony_ci} 250e41f4b71Sopenharmony_ci.text4 { 251e41f4b71Sopenharmony_ci color: #a9a9a9; 252e41f4b71Sopenharmony_ci font-size: 33px; 253e41f4b71Sopenharmony_ci} 254e41f4b71Sopenharmony_ci.area { 255e41f4b71Sopenharmony_ci width: 320px; 256e41f4b71Sopenharmony_ci border-bottom: 1px solid #1E90FF; 257e41f4b71Sopenharmony_ci} 258e41f4b71Sopenharmony_ci.innerbtn { 259e41f4b71Sopenharmony_ci width: 320px; 260e41f4b71Sopenharmony_ci height: 120px; 261e41f4b71Sopenharmony_ci justify-content: space-around; 262e41f4b71Sopenharmony_ci} 263e41f4b71Sopenharmony_ci.btntxt { 264e41f4b71Sopenharmony_ci text-color: #1E90FF; 265e41f4b71Sopenharmony_ci} 266e41f4b71Sopenharmony_ci``` 267e41f4b71Sopenharmony_ci 268e41f4b71Sopenharmony_ci 269e41f4b71Sopenharmony_ci```js 270e41f4b71Sopenharmony_ci// xxx.js 271e41f4b71Sopenharmony_civar info = null; 272e41f4b71Sopenharmony_ciimport promptAction from '@ohos.promptAction'; 273e41f4b71Sopenharmony_ciexport default { 274e41f4b71Sopenharmony_ci data: { 275e41f4b71Sopenharmony_ci curYear:'', 276e41f4b71Sopenharmony_ci curMonth:'', 277e41f4b71Sopenharmony_ci curDay:'', 278e41f4b71Sopenharmony_ci date:'', 279e41f4b71Sopenharmony_ci schedule:'', 280e41f4b71Sopenharmony_ci schedulelist:[] 281e41f4b71Sopenharmony_ci }, 282e41f4b71Sopenharmony_ci onInit() { 283e41f4b71Sopenharmony_ci // Obtain the current date. 284e41f4b71Sopenharmony_ci var date = new Date(); 285e41f4b71Sopenharmony_ci this.curYear = date.getFullYear(); 286e41f4b71Sopenharmony_ci this.curMonth = date.getMonth() + 1; 287e41f4b71Sopenharmony_ci this.curDay = date.getDate(); 288e41f4b71Sopenharmony_ci this.date = this.curYear + '-' + this.curMonth + '-' + this.curDay; 289e41f4b71Sopenharmony_ci this.schedulelist = [] 290e41f4b71Sopenharmony_ci }, 291e41f4b71Sopenharmony_ci addschedule(e) { 292e41f4b71Sopenharmony_ci this.$element('datedialog').show() 293e41f4b71Sopenharmony_ci }, 294e41f4b71Sopenharmony_ci canceldialog(e) { 295e41f4b71Sopenharmony_ci promptAction.showToast({ 296e41f4b71Sopenharmony_ci message: 'Event setting canceled.' 297e41f4b71Sopenharmony_ci }) 298e41f4b71Sopenharmony_ci }, 299e41f4b71Sopenharmony_ci getschedule(e) { 300e41f4b71Sopenharmony_ci info = e.value 301e41f4b71Sopenharmony_ci }, 302e41f4b71Sopenharmony_ci cancelschedule(e) { 303e41f4b71Sopenharmony_ci this.$element('datedialog').close() 304e41f4b71Sopenharmony_ci promptAction.showToast({ 305e41f4b71Sopenharmony_ci message: 'Event setting canceled.' 306e41f4b71Sopenharmony_ci }) 307e41f4b71Sopenharmony_ci }, 308e41f4b71Sopenharmony_ci// Touch OK to save the data. 309e41f4b71Sopenharmony_ci setschedule(e) { 310e41f4b71Sopenharmony_ci if (e.text === '') { 311e41f4b71Sopenharmony_ci this.schedule = info 312e41f4b71Sopenharmony_ci } else { 313e41f4b71Sopenharmony_ci this.schedule = info 314e41f4b71Sopenharmony_ci var addItem = {schedule: this.schedule,} 315e41f4b71Sopenharmony_ci this.schedulelist.push(addItem) 316e41f4b71Sopenharmony_ci } 317e41f4b71Sopenharmony_ci this.$element('datedialog').close() 318e41f4b71Sopenharmony_ci } 319e41f4b71Sopenharmony_ci} 320e41f4b71Sopenharmony_ci``` 321e41f4b71Sopenharmony_ci 322e41f4b71Sopenharmony_ci 323e41f4b71Sopenharmony_ci