日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
從微信小程序到鴻蒙JS開發(fā)-表單組件&注冊(cè)登錄模塊

想了解更多內(nèi)容,請(qǐng)?jiān)L問:

成都創(chuàng)新互聯(lián)專業(yè)提供達(dá)州電信機(jī)房服務(wù),為用戶提供五星數(shù)據(jù)中心、電信、雙線接入解決方案,用戶可自行在線購(gòu)買達(dá)州電信機(jī)房服務(wù),并享受7*24小時(shí)金牌售后服務(wù)。

和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos./#zz

 牛年將至,祝大家行行無bug,頁頁so easy~

在微信小程序中,提供了form組件,可以將input、picker、slider、button等全部放在form中,并設(shè)置name屬性實(shí)現(xiàn)類似html的表單提交功能。

鴻蒙js目前是沒有form組件的,因此我們需要在提交時(shí)手動(dòng)獲取輸入框、選擇框等的值,自行構(gòu)建數(shù)據(jù)對(duì)象。

1、登錄模塊

這里接著上一篇,通過dialog組件實(shí)現(xiàn)了模態(tài)登錄和注冊(cè)的窗口。登錄窗口的效果如下:

每一行中,放置圖標(biāo)和input輸入框。input使用的是默認(rèn)樣式,看起來還是很清爽的。

hml視圖層:

 
 
 
 
  1.                  
  2.                      
  3.                          
  4.                          
  5.                      
  •                      
  •                          
  •                          
  •                      
  •                      登錄
  •                  
  •              
  • 手機(jī)號(hào)的input設(shè)置type="number",在獲取焦點(diǎn)后鍵盤自動(dòng)彈出為數(shù)字鍵盤。密碼框type="password",彈出普通鍵盤,且輸入的字符會(huì)變?yōu)閳A點(diǎn),也可點(diǎn)擊右側(cè)眼睛圖標(biāo)查看密碼內(nèi)容。

    在最開始使用input時(shí),嘗試使用this.$element("id").value獲取,但這樣是獲取不到的。

     
     
     
     
    1. // 登錄
    2.  login() {
    3.      prompt.showToast({
    4.          message: "手機(jī)號(hào): " + this.$element("phoneInput").value +
    5.          ", 密碼: " + this.$element("pwdInput").value,
    6.          duration: 5000
    7.      })
    8.  }

    因此需要使用input的onchange屬性綁定值改變的事件,通過e.value取到改變后的值,并賦給data中的變量。

    順便提一下,今天突然找到了console打印日志的查看方式。需在最下方打開"HiLog"視圖,搜索"app Log"后即可查看。console.log()的內(nèi)容需設(shè)置日志等級(jí)"debug",console.info()則在"info"等級(jí)即可查看。

     
     
     
     
    1. // 手機(jī)號(hào)輸入框
    2.  inputPhone(e) {
    3.      this.phone = e.value;
    4.  },
    5.  // 密碼輸入框
    6.  inputPwd(e) {
    7.      this.pwd = e.value;
    8.  },
    9.  // 登錄
    10.  login() {
    11.      console.log("手機(jī)號(hào): " + this.phone + "密碼: " + this.pwd);
    12.  }

    這里能夠正常獲取輸入框的值了,就可以在點(diǎn)擊按鈕后將值傳給后臺(tái)服務(wù)器,進(jìn)行登錄的校驗(yàn)。按鈕的點(diǎn)擊方法通過onclick進(jìn)行綁定。

     
     
     
     
    1. // 登錄
    2.   login() {
    3.       fetch.fetch({
    4.           url: this.url + "/litemall/user/login?phone=" + this.phone + "&pwd=" + this.pwd,
    5.           responseType: "json",
    6.           success: res => {
    7.               let data = JSON.parse(res.data);
    8.               console.info(JSON.stringify(data));
    9.               if (0 != data.code) {
    10.                   prompt.showToast({
    11.                       message: data.msg,
    12.                       duration: 3000
    13.                   })
    14.               } else {
    15.                   let userInfo = data.data;
    16.                   userInfo.age = this.getAge(userInfo.birthday);
    17.                   this.userInfo = userInfo;
    18.                   this.$element("loginDialog").close();
    19.               }
    20.           }
    21.       })
    22.   }

    登錄失敗,用提示框提示用戶失敗原因:

    登錄成功,用戶信息賦值給頁面并關(guān)閉dialog:

    這里日志的打印需要使用JSON.stringify(),否則會(huì)打印"object"。

    input組件和button組件都提供了豐富的type可供選擇,具體可參考官方文檔。

    https://developer.harmonyos.com/cn/docs/documentation/doc-references/js-components-basic-input-0000000000611673

    css渲染層:

     
     
     
     
    1. .loginDialog {
    2.     width: 80%;
    3.     height: 400px;
    4.     display: flex;
    5.     flex-direction: column;
    6.     align-items: center;
    7.     justify-content: center;
    8. }
    9. .formItem {
    10.     width: 100%;
    11.     height: 100px;
    12.     display: flex;
    13.     align-items: center;
    14.     justify-content: space-between;
    15.     margin-bottom: 20px;
    16. }
    17. .formItem>image {
    18.     width: 70px;
    19.     height: 70px;
    20.     margin: 0 10px 0 10px;
    21. }
    22. input {
    23.     flex: 1;
    24. }
    25. .inputBtn {
    26.     width: 200px;
    27.     height: 70px;
    28. }

    2、注冊(cè)模塊

    注冊(cè)模塊同樣使用dialog彈窗,內(nèi)容比登錄要更豐富一些:

    hml視圖層:

     
     
     
     
    1.                  
    2.                      
    3.                          
    4.                          
    5.                      
  •                      
  •                          
  •                          
  •                      
  •                      
  •                          
  •                          
  •                      
  •                      
  •                          
  •                          
  •                      
  •                      
  •                          
  •                          {{ gender }}
  •                      
  •                      
  •                          
  •                          {{ birthday }}
  •                      
  •                      注冊(cè)
  •                  
  •              
  • 上面四個(gè)依然是input輸入框,隨后兩個(gè)使用了picker選擇框組件。需注意,選擇框組件標(biāo)記中需放置文本內(nèi)容,通過點(diǎn)擊這里的文本在頁面下方彈出選擇框。

    type="text"是文本選擇框,通過range屬性綁定一個(gè)字符串?dāng)?shù)組,效果如下:

    onchange屬性綁定選擇一項(xiàng)后的處理方法,e.newValue是選項(xiàng)值,e.newSelected是選項(xiàng)下標(biāo)。

    性別選擇框js邏輯層代碼:

     
     
     
     
    1. export default {
    2.     data: {
    3.         ...
    4.         gender: "點(diǎn)擊選擇性別",
    5.         genderVal: "",
    6.         genders: ['保密', '男', '女'],
    7.         ...
    8.     },
    9.     ...
    10.     // 性別選擇器
    11.     chooseGender(e) {
    12.         this.gender = e.newValue;
    13.         this.genderVal = e.newSelected;
    14.     },
    15.     ...
    16. }

    type="date"是日期選擇器,可以通過屬性指定開始、結(jié)束、當(dāng)前日期,通過onchange綁定選擇后的處理方法。效果如下:

    e.year/month/day分別為選擇的年/月/日,注意month比實(shí)際月份小1。

    生日選擇框js邏輯層:

     
     
     
     
    1. export default {
    2.     data: {
    3.        ...
    4.         birthday: "點(diǎn)擊選擇生日",
    5.         birthdayVal: ""
    6.     },
    7.     ...
    8.     // 生日選擇器
    9.     chooseBirthday(e) {
    10.         let month = (e.month + 1) + "";
    11.         if (month.length == 1) {
    12.             month = "0" + month;
    13.         }
    14.         let day = e.day + "";
    15.         if (day.length == 1) {
    16.             day = "0" + day;
    17.         }
    18.         let birthday = e.year + "-" + month + "-" + day;
    19.         this.birthday = birthday;
    20.         this.birthdayVal = birthday;
    21.     },
    22.     ...
    23. }

    這里開發(fā)者工具有一個(gè)bug,type="date"在提示時(shí)錯(cuò)誤拼寫成了"data"。

    選擇器還有time, datetime, multi-text三種,鴻蒙的封裝確實(shí)很好看好用。

    注冊(cè)的方法:

     
     
     
     
    1. // 注冊(cè)
    2.  register() {
    3.      fetch.fetch({
    4.          url: this.url + "/litemall/user/register",
    5.          method: "POST",
    6.          data: {
    7.              username: this.username,
    8.              password: this.pwd,
    9.              gender: this.genderVal,
    10.              birthday: this.birthdayVal,
    11.              nickname: this.nickname,
    12.              mobile: this.phone
    13.          },
    14.          header: {
    15.              "Content-Type": "application/json;charset=UTF-8"
    16.          },
    17.          responseType: "json",
    18.          success: res => {
    19.              let data = JSON.parse(res.data);
    20.              console.info(JSON.stringify(data));
    21.              if (0 != data.code) {
    22.                  prompt.showToast({
    23.                      message: data.msg,
    24.                      duration: 3000
    25.                  });
    26.              } else {
    27.                  prompt.showToast({
    28.                      message: "注冊(cè)成功",
    29.                      duration: 3000
    30.                  });
    31.                  this.$element("registerDialog").close();
    32.              }
    33.          }
    34.      })
    35.  }

    還需要注意,如果使用fetch發(fā)送請(qǐng)求,且data給的是一個(gè)對(duì)象時(shí),請(qǐng)求頭的Content-Type自動(dòng)設(shè)置為application/x-www-form-urlencoded。如果服務(wù)器接收json數(shù)據(jù),則需要設(shè)置請(qǐng)求頭,否則會(huì)報(bào)如下錯(cuò)誤。

     
     
     
     
    1. Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported]

    注冊(cè)一下:

    想了解更多內(nèi)容,請(qǐng)?jiān)L問:

    和華為官方合作共建的鴻蒙技術(shù)社區(qū)

    https://harmonyos./#zz


    網(wǎng)站欄目:從微信小程序到鴻蒙JS開發(fā)-表單組件&注冊(cè)登錄模塊
    分享網(wǎng)址:http://m.5511xx.com/article/cdephsg.html

    其他資訊