小程序组件(一)


1.知识点

(1)利用正则表达式验证邮箱的方法。

(2)模态对话框API函数wx.showModal(Object object)的使用方法。

(3)页面跳转API函数wx.navigateTo(Object object)的使用方法。

(4)form、input、button等组件的使用方法。

2.相关知识总结

2.1正则表达式

2.1.1正则表达式由一些普通字符和一些元字符组成。普通字符包括大小写字母和数字,而元字符则具有特殊含义。正则表达式常用元字符含义如表2.1所示。

表 2.1 正则表达式常用元字符含义
元字符 描述
\ 转义字符标识符
^ 匹配输入字行首。如果设置了RegExp对象的Multiline属性,^也匹配“\n”或“\r”之后的位置
$ 匹配输入行尾。如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置
* 匹配前面的子表达式任意次。例如,zo*能匹配“z”,也能匹配“zo”以及“zoo”。等价于{0,}
+ 匹配前面的子表达式一次或多次(大于等于1次)
匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“do”或“does”。等价于{0,1}
{n} n是一个非负整数。匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o
{n,m} m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次
[a-z] 字符范围。匹配指定范围内的任意字符。例如,[a-z]可以匹配“a”到“z”范围内的任意小写字母字符。注意:只有连字符在字符组内部时,并且出现在两个字符之间时,才能表示字符的范围;如果出现在字符组的开头,则只能表示连字符本身
[^a-z] 负值字符范围。匹配任何不在指定范围内的任意字符。例如,【^a-z】可以匹配任何不在“a”到“z”范围内的任意字符
\d 匹配一个数字字符。等价于[0-9]。grep要加上-P,perl正则支持
\D 匹配一个非数字字符。等价于【^0-9】。grep要加上-P,perl正则支持
\s 匹配任何不可见字符,包括空格、制表符、换页符等。等价于[\f\n\r\t\v]
\S 匹配任何可见字符。等价于【^\f\n\r\t\v】
\w 匹配包括下划线的任何单词字符。类似但不等价于“[A-Za-z0-9_]”,这里的“单词”字符使用Unicode字符集
\W 匹配任何非单词字符。等价于“【^A-Za-z0-9_】”

2.1.2利用正则表达式验证电子邮箱。如下正则表达式的含义:

/^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(.[a-zA-Z0-9-]+)*.[a-zA-Z0-9]{2,6}$/

(1)正则表达式以符号/^开始,以符号$/结束。
(2)@之前的表达式[a-zA-Z0-9_.-]+表示字符串必须由1个及1个以上的大小写字母、数字、下划线、点或横杠组成,+号表示前面字符出现次数必须大于或等于1.
(3)@之后的表达式[a-zA-Z0-9-]+表示字符串必须由1个及1个以上的大小的大小写字母、数字或横杠组成。
(4)(\.[a-zA-Z0-9-]+)*表示后面字符串第一个字符必须是点,点后面字符串必须由1个及1个以上的大小写字母、数字或横杠组成。*表示匹配前面的子表达式任意次。
(5)\\.[a-zA-Z0-9]{2,6}表示最后一个表达式由2~6个字母或数字构成。

2.2显示模态对话框的API函数wx.showModal(Object object)

模态对话框与非模态对话框的区别是:模态对话框显示时不能操作该应用程序的其他窗口界面,而非模态对话框显示时可以操作该应用程序的其他窗口界面。显示模态对话框的API函数参数属性表如表2.2所示。

表 2.2 API函数wx.showModal(Object object)的参数属性说明
属性 类型 默认值 必填 说明
title string 提示的标题
content string 提示的内容
showCancel boolean TRUE 是否显示“取消”按钮
cancelText string ‘取消’ “取消”按钮的文字,最多4个字符
cancelColor string #000000 “取消”按钮的文字颜色,必须是十六进制格式的颜色字符串
confireText string ‘确定’ “确定”按钮的文字,最多4个字符
confirmColor string #576B95 “确定”按钮的文字颜色,必须是十六进制格式的颜色字符串
success function 接口调用成功的回调函数
fail function 接口调用失败的回调函数
complete function 接口调用结束的回调函数(调用成功、失败都会执行)

object.success(Object res)回调函数的参数Object res的属性如下表2.3所示。

表 2.3 object.success回调函数参数object res的属性
属性 类型 说明
confirm boolean 为TRUE时,表示用户点击了“确定”按钮
cancel boolean 为TRUE时,表示用户点击了“取消”按钮(用于Android系统区分点击蒙层关闭还是点击“取消”按钮关闭)

2.3页面跳转API函数wx.navigateTo(Object object)

保留当前页面,跳转到应用内的某个页面,但是不能跳转到tabBar页面。使用wx.navigateBack可以返回到原页面。小程序中页面最多10层。参数Object object的属性出success、fail和complete三个回调函数外,还有一个string类型的必填属性url,表示需要跳转的应用内非tabBar的页面的路径,路径后可以带参数。

2.4form表单

form表单组件用于将用户在其内部组件switch、input、checkbox、silder、picker内输入的内容提交。当点击form表单的form-type为submit的button组件时,会将表单组件中的value值进行提交,需要在表单内各组件中加上name来区分不同组件的value。form组件常用属性说明如下表2.4所示。

表 2.4 form组件常用属性说明
属性 类型 必填 说明
bindsubmit eventhandle 携带form中的数据触发submit事件,event.detail={value:{‘name’:’value’},formId:’’}
bindreset eventhandle 表单重置时会触发reset事件

2.5picker选择器组件

2.5.1picker组件是从屏幕底部弹起的滚动选择器,现支持5中类型的选择器,通过mode来区分,分别是:普通选择器、多列选择器、时间选择器、日期选择器、省市选择器,默认的是普通选择器。各种类型picker组件的属性说明如下表2.5~2.9所示。

表 2.5 普通选择器(mode=selector)的属性说明
属性 类型 默认值 说明
range array/object array [] mode为selector或multiSelector时,range有效
range-key string 当range是一个object array时,通过range-key来指定Object中key的值作为选择器显示内容
value number 0 value的值表示选择了range中的第几个(下标从0开始)
bindchange eventHandle value改变时触发change事件,event.detail={value:value}
表 2.6 多列选择器(mode=multiSelector)的属性说明
属性 类型 默认值 说明
range 二维array/二维object array [] mode为selector或multiSelector时,range有效。二维数组,长度表示多少列,数组的每项表示每列的数据,如[[“a”,”b”],[“c”,”d”]]
range-key string 当range是一个object array时,通过二维range-key来指定Object中key的值作为选择器显示内容
value array [] value每一项的值表示选择了range中的第几个(下标从0开始)
bindchange eventhandle value改变时触发change事件,event.detail={value:value}
bindcolumnchange eventhandle 某一列的值改变时触发,columnchange事件,event.detail={column:column,value:value},column的值表示改变了第几列(下标从0开始),value的值表示变更值的下标
表 2.7 时间选择器(mode=time)的属性说明
属性 类型 默认值 说明
value string 表示选中的时间,格式为”hh:mm”
start string 表示有效时间范围的开始,字符串格式为”hh:mm”
end string 表示有效时间范围的结束,字符串格式为”hh:mm”
bindchange eventhandle value改变时触发change事件,event.detail={value:value}
表 2.8 日期选择器(mode=date)的属性说明
属性 类型 默认值 说明
value string 0 表示选中的日期,格式为”YYYY-MM-DD”
start string 表示有效日期范围的开始,字符串格式为”YYYY-MM-DD”
end string 表示有效日期范围的结束,字符串格式为”YYYY-MM-DD”
fields string day 有效值year,month,day,表示选择器的粒度
bindchange eventhandle value改变时触发change事件,event.detail={value:value}
表 2.9 省市选择器(mode=region)的属性说明
属性 类型 默认值 说明
value array [] 表示选中的省市区,默认选中每一列的第一个值
custom-item string 可为每一列的顶部添加一个自定义的项
bindchange eventhandle value改变时触发change事件,event.detail={value:value,code:code,postcode:postcode},其中字段code时统计用区划代码,postcode时邮政编码

3.案例分析

3.1案例描述

编写一个考生选择考试场次的小程序,考生首先利用邮箱和密码登录,输入自己的姓名和学号后选择考试场次。考生登陆时需要进行邮箱和密码认证,如果某项输入为空,或者邮箱填写不正确,或者输入的密码和确认密码不一致,将给出错误提示并要求重新填写。

3.2实现效果

根据案例描述可以做出如下图所示的效果。

(1)在没有输入邮箱或密码情况下点击“登录”按钮,则会出现如图01所示的界面,在此时界面下方给出了“邮箱或密码不得为空!”的提示。

01

(2)输入邮箱地址时,邮箱地址input组件的边框颜色发生变化,如果邮箱格式输入不正确,则在输入完成时会显示“邮箱格式错误”的提示。

(3)输入密码时,如果两次输入的密码不一致,点击“登录”按钮会给出“两次输入密码不一致”的提示,如图02所示。

02

(4)如果邮箱和密码都正确,点击“登录”将进入”考试时段选择”界面,此时姓名input组建将自动获得焦点,输入完姓名和学号后,当点击“请选择考试时段:”文本时,在屏幕下方弹出三个场次的时间段,如图03所示。

03

(5)所有信息输入和选择完成后点击“确定”按钮,此时将弹出“确认信息”对话框,如图04所示,如果信息无误点击“确认”按钮,此时出现“信息确认”对话框“如果信息不正确点击”取消“按钮可以重新填写。

04

3.3案例实现

3.3.1编写index.wxml文件代码

(1)在form组件中利用text组建和input组件实现电子邮件、密码和确认密码的输入提示及输入,后面放置1个button登录按钮实现form组建的提交事件,按钮后main防治了2个view组件用来显示当邮箱或密码与确认密码不一致是的错误提示。

(2)代码中的事件绑定处理函数由2个:form组件提交事件绑定函数formSubmit和input组件输入变化事件绑定函数inputemail,这两个函数都在input.js文件中进行定义。

(3)代码中主要使用了8种样式:page,.hr,.lineLayout,text,input,input:hover,button,.txt。

<!--index.wxml-->
<view class="box">
  <view class="title">考试场次选择</view>
  <view class="hr"></view>
  <form bindsubmit="formSubmit">
    <view class="lineLayout">
      <text>电子邮箱:</text>
      <input type="text" bindchange="inputemail" name="email" value="{{getEmail}}" placeholder="请输入电子邮箱" />
    </view>
    <view class="lineLayout">
      <text>输入密码:</text>
      <input type="password" name="password" value="{{getPwd}}" placeholder="请输入密码" />
    </view>
    <view class="lineLayout">
      <text>确认密码:</text>
      <input type="password" name="confirm" value="{{getPwdConfirm}}" placeholder="请再次输入密码" />
    </view>
    <view>
      <button type="primary" form-type="submit">登录</button>
    </view>
    <view>
      <view class="txt">{{showMsg01}}</view>
      <view class="txt">{{showMsg02}}</view>
    </view>
  </form>
</view>

3.3.2编写index.wxss文件代码

/**index.wxss**/
.lineLayout{
  display: inline-block;
  margin: 10px;
}
.hr{
  height: 2px;
  background-color: greenyellow;
  margin: 10px 0;
}
.text{
  float: left;
}
input{
  width: 180px;
  height: 30px;
  border-bottom: 2px solid silver;
  float: right;
}
input:hover{
  border-bottom: 2px solid chocolate;
}
button{
  width: 150px;
  margin: 20px auto;
}
page{
  height: 100%;
  background: gainsboro;
}
.txt{
  color: red;
  background: yellow;
}

3.3.3编写index.js文件代码

代码主要定义了3个函数:formSubmit,inputemail和checkEmail。

(1)form组件提交事件函数formSubmit。当点击form组件中的提交按钮后引发该事件。函数首先根据从邮箱和密码输入框中获取的字符串长度e.detail.value.email.length和e.detail.value.password.length判断输入的数据是否为空,如果为空给出错误提示,否则再判断密码和确认密码是否一致,如果不一致给出错误提示并清空两个输入框中的内容,如果一致则让页面跳转带detail页面。

(2)邮件输入框输入变化函数inputemail。当输入框中输入的内容发生变化时引发该事件。函数首先获取邮件输入框中输入的值e.detail.value,然后调用自定义对象函数this.checkEmail()判断输入的字符串是否符合邮箱格式要求。

(3)自定义对象函数checkEmail。首先将正则表达式邮箱验证字符串复制给变量str,然后调用字符串的test函数来验证在邮箱输入框中输入的字符串email是否符合正则表达式的要求,如果符合要求则返回ture,表示通过验证,否则调用信息框给出错误提示,清空邮件输入框内容并返回false,表示没有通过验证。

// index.js
Page({
  data: {
   getEmail:'',
   getPwd:'',
   getPwdConfirm:''
  },
  formSubmit:function(e){                    //提交表单(点击“注册”按钮)事件
    if(e.detail.value.email.length==0||e.detail.value.password.length==0){  //判断邮箱和密码输入框内容是否为空
      this.setData({
        showMsg01:'邮箱或密码不得为空!'
      })
    }else if(e.detail.value.password != e.detail.value.confirm){
      this.setData({
        showMsg02:'两次输入密码不一致!',
        getPwd:'',                         //清空输入框内容
        getPwdConfirm:''
      })
    }else{
      wx.navigateTo({
        url: '../detail/detail',
      })
    }
  },
  inputemail:function(e){
    var email=e.detail.value
    var checkedNum=this.checkEmail(email)
  },
  checkEmail:function(email){
    let str=/^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$/
    if(str.test(email)){               //检查邮箱地址是否符合正则表达式要求
      return true
    }else{
      wx.showToast({                  //显示消息提示框
        title: '邮箱格式错误',
        icon:'loading'
      })
      this.setData({
        getEmail:''
      })
      return false
    }
  }
})

3.3.4在pages文件夹中创建detail文件夹,在其中添加4个文件,然后编写detail.wxml文件代码。该页面的主要功能是:用户输入姓名和学号,并选择考试时段。耶main主要利用form组件,input组件和picker组件来实现相应功能。

(1)文件代码绑定的事件处理函数包括:form组件提交事件函数formSubmit和picker组件选择变化事件函数chooseTime。这两个函数在detail.js文件中进行了定义。

(2)文件代码中使用的样式包括:page,.flex,input,input:hover,picker,.btnLayout和button。这些样式在detail.wxss文件中进行定义。

<!--pages/detail/detail.wxml-->
<view class="box">
  <view class="title">考试时段选择</view>
  <form bindsubmit="formSubmit">
    <view class="flex">
      <text>姓名:</text>
      <input type="text" value="{{name}}" name="name" auto-focus />
    </view>
    <view class="flex">
      <text>学号:</text>
      <input type="number" value="{{id}}" name="id" />
    </view>
    <picker bindchange="chooseTime" value="{{index}}" range="{{array}}" name="time">请选择考试时段:{{array[index]}}</picker>
    <view class="btnLayout">
      <button type="primary" form-type="submit">确定</button>
      <button type="primary">取消</button>
    </view>
  </form>
</view>

3.3.5编写detail.wxss文件代码

/* pages/detail/detail.wxss */
page{
  height: 100%;
  background: gainsboro;
}
.flex{
  display: flex;
  margin: 5px 0;
  justify-content: flex-start;
  align-items: center;
}
.btnLayout{
  display: flex;
  flex-direction: row;
  justify-content: space-around;
  margin: 50px 0;
  width: 100%;
}
input{
  width: 150px;
  height: 30px;
  border: 2px solid silver;
  margin: 5px;
}
input:hover{
  border: 2px solid chocolate;
}
picker{
  margin: 10px;
  padding-top: 10px;
  padding-bottom: 10px;
}
button{
  width: 80px;
}

3.3.6编写detail.js文件代码

代码主要初始化了picker组件使用的数组array,定义了form组件提交事件函数formSubmit和picker组件选择变化事件函数chooseTime。

(1)array数组初始化。在打他中初始化了array数组。

(2)formSubmit函数。首先获取input组件中输入的姓名、学号以及picker组件的选项序号,然后调用wx.showModal()模态对话框显示输入和选择的信息并给出正确的提示,如果点击“确定”按钮,则调用wx.showModal()模态对话框显示确认信息,页面跳转到主页面;如果点击“取消”按钮,则在console中显示取消信息。

(3)chooseTime函数。用于获取选择的考试时间段,利用e.detail.value表达式可以获得选项的序号,在视图层根据序号找到相应的时间段。

// pages/detail/detail.js
Page({
  data: {
    array:[
      '第一场 15:00',
      '第二场 16:20',
      '第三场 17:40'
    ]
  },
  formSubmit:function(e){
    var name=e.detail.value.name;         //获取姓名输入框内容
    var id=e.detail.value.id;             //获取学号输入框内容
    var time=e.detail.value.time;
    wx.showModal({                       //显示模态对话框
      title: '确认信息',
      content:e.detail.value.name+"同学,你的学号是"+e.detail.value.id+",你选择的场次是:"+this.data.array[time]+",请确认信息!",
      success:function(res){            //wx.shoeModal接口调用成功的回调函数
        if(res.confirm){
          wx.showModal({
            title: '信息确认',
            content:'你的考场信息已经确认!'
          })
          wx.navigateTo({              //页面跳转
            url: '../index/index',
          })
        }else{
          console.log('用户点击取消')
        }
      }
    })
  },
  chooseTime:function(e){
    var index=e.detail.value        //获得picker组件选项下标
    this.setData({
      index:index
    })
  }
})

文章作者: 桑落
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 桑落 !
评论
  目录