成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

從微信小程序到鴻蒙JS開發-menu&toast&dialog

開發
文章由鴻蒙社區產出,想要了解更多內容請前往:51CTO和華為官方戰略合作共建的鴻蒙技術社區https://harmonyos.51cto.com/#zz

 [[382941]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com/#zz

1、menu彈出菜單

這是微信小程序沒有的一個組件,提供了一個可喚起的輕量級彈出菜單。menu的子組件為option。

  1. <menu id="userMenu" onselected="menuSelect"
  2.     <option value="login">登錄</option
  3.     <option value="register">注冊</option
  4. </menu> 

在hml中寫好菜單,但這時啟動app是不會顯示出來的,且不會占用任何頁面空間。

menu需要在方法中被喚起,因此需要設置id屬性。這里通過點擊“點擊登錄/注冊“文本框喚起菜單:

  1. <text if="{{ !userInfo }}" onclick="showUserMenu" class="info_hint"
  2.     點擊登錄/注冊 
  3. </text> 

  1. showUserMenu() { 
  2.     this.$element("userMenu").show(); 

使用無參的show()方法,菜單在頁面的左上角被喚起彈出。

show方法還有一個重載方法,可以設置菜單彈出的x軸和y軸偏移量。x和y需要給數值類型,單位為px。

  1. showUserMenu() { 
  2.     this.$element("userMenu").show({ 
  3.         x: 100, 
  4.         y: 100 
  5.     }); 

菜單項的選中事件通過onselect屬性綁定,event.value即為選中的option的value屬性。

  1. menuSelect(event) { 
  2.     let value = event.value; 
  3.     prompt.showToast({ 
  4.         message: "點擊菜單項的值為" + value, 
  5.         duration: 3000 
  6.     }) 

option一定要設置value屬性,否則編譯不通過。value重復倒是不會報錯,但這樣無法判斷選中了哪一個菜單項,不建議。


2、Toast提示框

鴻蒙js開發模式至今無法通過console.log()等方法打印日志(mac系統如此),但在寫程序時不免要進行調試,提示框就是一種很好的方法。

在js文件中引入prompt模塊:

  1. import prompt from '@system.prompt'

調用prompt.showToast()彈出提示框:

  1. prompt.showToast({ 
  2.     message: "提示信息"
  3.     duration: 3000 
  4. }); 

 這個方法只能傳遞message和duration兩個參數,彈出位置是在頁面接近最下方中間位置,而且字有點小。

源碼注釋中說明,duration取值是1500到10000,如果不在范圍中會自動更改為邊界值。

再看看微信小程序的Toast,使用wx.showToast彈出。

  1. wx.showToast({ 
  2.     title: '提示信息'
  3.     duration: 3000 
  4. }) 

彈出位置在頁面正中,且可以切換預置,或自定義圖標。

  1. wx.showToast({ 
  2.     title: '常回家看看'
  3.     duration: 3000, 
  4.     icon: 'none'
  5.     image: "/icon/index1.png" 
  6. }) 

就是這個圖標位置怪怪的,但個人感覺這種提示彈窗更加明顯,可擴展性也更強。

3、prompt模塊的對話框dialog

需要用戶確認操作的功能十分常用,比如是否刪除,是否下單等。在微信小程序中采用的是wx.showModal(),彈窗內容、按鈕內容和顏色都可以自定義,事件在success函數中進行捕獲:

  1. wx.showModal({ 
  2.   title: "提示"
  3.   content: "確認刪除嗎?"
  4.   confirmColor: "#e20a0b"
  5.   confirmText: "對,刪了它"
  6.   cancelColor: "#777777"
  7.   cancelText: "再考慮一下"
  8.   success: res => { 
  9.     if(res.confirm) { 
  10.       console.log("刪除成功!"); 
  11.     } else if(res.cancel) { 
  12.       console.log("取消刪除操作。"
  13.     } 
  14.   } 
  15. }) 

在鴻蒙中,prompt模塊的showDialog()方法提供了彈出對話框:

  1. prompt.showDialog({ 
  2.      title: "操作提示"
  3.      message: "確認刪除嗎?"
  4.      buttons: [ 
  5.          { 
  6.              text: "我要刪除"
  7.              color: "#e20a0b" 
  8.          }, 
  9.          { 
  10.              text: "取消操作"
  11.              color: "#777777" 
  12.          } 
  13.      ], 
  14.      success: res => { 
  15.          prompt.showToast({ 
  16.              message: "點擊了第" + res.index + "個按鈕" 
  17.          }) 
  18.      } 
  19.  }) 

對話框也是在底部彈出的,且按鈕可以自行定義。點擊按鈕后,success方法會獲取按鈕的索引值,根據索引進行業務邏輯的編寫。

想要設置三個按鈕也是可以的,這個功能微信小程序的showModal()是沒有的。

  1. prompt.showDialog({ 
  2.         title: "操作提示"
  3.         message: "確認刪除嗎?"
  4.         buttons: [ 
  5.             { 
  6.                 text: "我要刪除"
  7.                 color: "#e20a0b" 
  8.             }, 
  9.             { 
  10.                 text: "取消操作"
  11.                 color: "#777777" 
  12.             }, 
  13.             { 
  14.                 text: "附加按鈕"
  15.                 color: "#333333" 
  16.             } 
  17.         ], 
  18.         success: res => { 
  19.             prompt.showToast({ 
  20.                 message: "點擊了第" + res.index + "個按鈕" 
  21.             }) 
  22.         } 
  23.     }) 

4、dialog對話框組件

prompt.showDialog()只能彈出具有提示文字和按鈕的對話框,如果需要更豐富的模態對話框功能,鴻蒙還提供了dialog組件,這個組件在微信小程序中也是沒有的。和menu一樣,寫在hml中的dialog并不會顯示,也不會占用頁面空間,需要通過id在方法中被喚起。

  1. <dialog id="loginDialog"
  2.     <div class="loginDialog"
  3.         <div class="formItem"
  4.             <image src="{{ phone ? (imgUrl + 'phone.png') : (imgUrl + 'phone1.png') }}"></image> 
  5.             <input id="phoneInput" type="number" placeholder="請輸入手機號" onchange="inputPhone"></input> 
  6.         </div> 
  7.         <div class="formItem"
  8.             <image src="{{ pwd ? (imgUrl + 'password.png') : (imgUrl + 'password1.png') }}"></image> 
  9.             <input id="pwdInput" type="password" placeholder="請輸入密碼" onchange="inputPwd"></input> 
  10.         </div> 
  11.         <button class="inputBtn" onclick="login">登錄</button> 
  12.     </div> 
  13. </dialog> 

這里需注意,官方文檔中說的“支持單個子組件”的意思是,dialog中只能有一個直接子組件,即需要用一個div將內容套起來。

 

同樣地,根據id找到元素,使用show()方法喚起對話框。對話框的show()方法無重載,會在頁面底部彈出。dialog的大小取決于子組件div的大小,div給樣式即可。

  1. menuSelect(event) { 
  2.      let value = event.value; 
  3.      if ("login" == value) { 
  4.          this.phone = ""
  5.          this.pwd = ""
  6.          this.$element("loginDialog").show(); 
  7.      } else if ("register" == value) { 
  8.          this.phone = ""
  9.          this.pwd = ""
  10.          this.$element("registerDialog").show(); 
  11.      } 
  12.  }, 

可用close()方法關閉它。

  1. this.$element("registerDialog").close(); 

附上本頁面的代碼,后臺功能自己搭建了Spring Boot服務器進行交互。下篇將講解表單組件:

  1. <!-- 我的 --> 
  2.   <div class="myPage"
  3.       <div class="userInfo"
  4.           <image src="{{ userInfo && userInfo.avatar != '0' ? userInfo.avatar : (imgUrl + 'user.png')}}"></image> 
  5.           <div class="info_desc"
  6.               <text if="{{ !userInfo }}" onclick="showUserMenu" class="info_hint"
  7.                   點擊登錄/注冊 
  8.               </text> 
  9.               <text if="{{ userInfo }}" class="info_name"
  10.                   {{ userInfo.nickname ? userInfo.nickname : userInfo.username }} 
  11.               </text> 
  12.               <text if="{{ userInfo }}" class="info_detail"
  13.                   {{ userInfo.age }}  {{ userInfo.gender == 1 ? '男' : (userInfo.gender == 2 ? '女' : '性別保密') }} 
  14.               </text> 
  15.           </div> 
  16.       </div> 
  17.       <menu id="userMenu" onselected="menuSelect"
  18.           <option value="login">登錄</option
  19.           <option value="register">注冊</option
  20.       </menu> 
  21.       <dialog id="loginDialog"
  22.           <div class="loginDialog"
  23.               <div class="formItem"
  24.                   <image src="{{ phone ? (imgUrl + 'phone.png') : (imgUrl + 'phone1.png') }}"></image> 
  25.                   <input id="phoneInput" type="number" placeholder="請輸入手機號" onchange="inputPhone"></input> 
  26.               </div> 
  27.               <div class="formItem"
  28.                   <image src="{{ pwd ? (imgUrl + 'password.png') : (imgUrl + 'password1.png') }}"></image> 
  29.                   <input id="pwdInput" type="password" placeholder="請輸入密碼" onchange="inputPwd"></input> 
  30.               </div> 
  31.               <button class="inputBtn" onclick="login">登錄</button> 
  32.           </div> 
  33.       </dialog> 
  34.   </div> 
  35.   <!-- 我的end --> 

css:

  1. /*我的*/ 
  2. .userInfo { 
  3.     width: 92%; 
  4.     height: 240px; 
  5.     margin: 20px 0 20px 0; 
  6.     border-radius: 30px; 
  7.     box-shadow: 5px 5px 15px #bbbbbb; 
  8.     background-color: #eeeeee; 
  9.     display: flex; 
  10.     align-items: center; 
  11. .userInfo>image { 
  12.     margin: 0 40px 0 40px; 
  13.     width: 160px; 
  14.     height: 160px; 
  15.     border-radius: 90px; 
  16.     object-fit: contain; 
  17. .info_desc { 
  18.     height: 200px; 
  19.     margin-right: 20px; 
  20.     flex: 1; 
  21.     display: flex; 
  22.     flex-direction: column
  23.     justify-content: center; 
  24. .info_hint { 
  25.     font-size: 48px; 
  26.     font-weight: bold; 
  27.     color: #333333; 
  28. .info_name { 
  29.     font-size: 40px; 
  30.     font-weight: 600; 
  31.     height: 100px; 
  32.     color: #333333; 
  33. .info_detail { 
  34.     font-size: 34px; 
  35.     color: #666666; 
  36. .loginDialog { 
  37.     width: 80%; 
  38.     height: 400px; 
  39.     display: flex; 
  40.     flex-direction: column
  41.     align-items: center; 
  42.     justify-content: center; 
  43. .formItem { 
  44.     width: 100%; 
  45.     height: 100px; 
  46.     display: flex; 
  47.     align-items: center; 
  48.     justify-content: space-between
  49.     margin-bottom: 20px; 
  50. .formItem>image { 
  51.     width: 70px; 
  52.     height: 70px; 
  53.     margin: 0 10px 0 10px; 
  54. input { 
  55.     flex: 1; 
  56. .inputBtn { 
  57.     width: 200px; 
  58.     height: 70px; 

js:(省略data部分)

  1. // 彈出菜單 
  2.  showUserMenu() { 
  3.      this.$element("userMenu").show(); 
  4.  }, 
  5.  // 菜單選中 
  6.  menuSelect(event) { 
  7.      let value = event.value; 
  8.      if ("login" == value) { 
  9.          this.phone = ""
  10.          this.pwd = ""
  11.          this.$element("loginDialog").show(); 
  12.      } else if ("register" == value) { 
  13.          this.phone = ""
  14.          this.pwd = ""
  15.          // this.$element("registerDialog").show(); 
  16.      } 
  17.  }, 
  18.  // 手機號輸入框 
  19.  inputPhone(e) { 
  20.      this.phone = e.value; 
  21.  }, 
  22.  // 密碼輸入框 
  23.  inputPwd(e) { 
  24.      this.pwd = e.value; 
  25.  }, 
  26.  // 登錄 
  27.  login() { 
  28.      fetch.fetch({ 
  29.          url: this.url + "/litemall/user/login?phone=" + this.phone + "&pwd=" + this.pwd, 
  30.          responseType: "json"
  31.          success: res => { 
  32.              let data = JSON.parse(res.data); 
  33.              if (0 != data.code) { 
  34.                  prompt.showToast({ 
  35.                      message: data.msg, 
  36.                      duration: 3000 
  37.                  }) 
  38.              } else { 
  39.                  this.userInfo = data.data; 
  40.                  this.$element("loginDialog").close(); 
  41.              } 
  42.          } 
  43.      }) 
  44.  } 

登錄成功效果:

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com/#zz

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2021-02-23 12:25:26

鴻蒙HarmonyOS應用開發

2021-03-02 09:29:29

鴻蒙HarmonyOS應用開發

2021-02-20 09:52:02

鴻蒙HarmonyOS應用開發

2021-02-21 11:09:18

鴻蒙HarmonyOS應用開發

2021-02-23 12:23:57

鴻蒙HarmonyOS應用開發

2021-02-25 10:01:19

鴻蒙HarmonyOS應用開發

2021-02-04 13:49:41

鴻蒙HarmonyOS應用開發

2021-02-23 09:52:42

鴻蒙HarmonyOS應用開發

2021-02-05 09:46:16

鴻蒙HarmonyOSjs開發

2021-02-25 15:13:08

鴻蒙HarmonyOS應用開發

2021-02-07 09:17:24

鴻蒙HarmonyOS應用開發

2021-02-24 09:36:03

鴻蒙CSS應用開發

2017-05-08 15:03:07

微信小程序開發實戰

2016-09-28 18:10:59

微信程序MINA

2016-09-27 16:38:24

JavaScript微信Web

2016-11-04 10:49:48

微信小程序

2016-09-27 20:36:23

微信HttpWeb

2016-11-04 10:30:17

微信小程序

2018-09-11 10:32:07

云開發小程序開發者

2016-11-07 10:30:07

微信小程序安裝配置
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久精品久久久久久 | 国产精品久久久亚洲 | 国产精品一区二区久久 | 国产精品视频一区二区三区不卡 | 91精品国产91久久综合桃花 | 国产精品久久久久久吹潮 | 日韩欧美国产一区二区三区 | 日韩视频精品在线 | 久久99精品久久久 | 久久精品综合 | 午夜天堂精品久久久久 | 久草视频在线播放 | 欧美中文视频 | 久久久.com | 日韩国产欧美一区 | 午夜国产羞羞视频免费网站 | 欧美天堂一区 | 91毛片在线观看 | 麻豆精品国产91久久久久久 | 亚洲美女一区 | 欧美日韩精品久久久免费观看 | 国产精品日本一区二区在线播放 | 国产精品国产成人国产三级 | 中文字幕三区 | 国产日产精品一区二区三区四区 | 国产精品美女视频 | 国产高清在线观看 | 久久久久国产一区二区三区 | 日韩精品在线网站 | 天堂资源 | 国产精品国产自产拍高清 | 亚洲性综合网 | 欧美成年网站 | 国产欧美一区二区三区国产幕精品 | 一级黄在线观看 | 欧美亚洲视频在线观看 | 精品久久久久久久久久久久 | 国产精品久久 | 国产99久久精品一区二区300 | 色综合久久久 | 午夜精品久久久 |