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![en-us_image_0000001267767893](figures/en-us_image_0000001267767893.gif)
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![en-us_image_0000001223287720](figures/en-us_image_0000001223287720.gif)
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 **&lt;dialog&gt;** component cannot be dynamically updated.
155e41f4b71Sopenharmony_ci>
156e41f4b71Sopenharmony_ci> - The **&lt;dialog&gt;** 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 **&lt;dialog&gt;** component to implement a schedule. When the dialog box is open, use the [&lt;textarea&gt;](../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![en-us_image_0000001223127756](figures/en-us_image_0000001223127756.gif)