小程序组件

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)的参数属性说明

属性类型默认值必填说明
titlestring提示的标题
contentstring提示的内容
showCancelbooleanTRUE是否显示“取消”按钮
cancelTextstring'取消'“取消”按钮的文字,最多4个字符
cancelColorstring#000000“取消”按钮的文字颜色,必须是十六进制格式的颜色字符串
confireTextstring'确定'“确定”按钮的文字,最多4个字符
confirmColorstring#576B95“确定”按钮的文字颜色,必须是十六进制格式的颜色字符串
successfunction接口调用成功的回调函数
failfunction接口调用失败的回调函数
completefunction接口调用结束的回调函数(调用成功、失败都会执行)

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

                             表 2.3 object.success回调函数参数object res的属性

属性类型说明
confirmboolean为TRUE时,表示用户点击了“确定”按钮
cancelboolean为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组件常用属性说明

属性类型必填说明
bindsubmiteventhandle携带form中的数据触发submit事件,event.detail={value:{'name':'value'},formId:''}
bindreseteventhandle表单重置时会触发reset事件

2.5picker选择器组件

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

                                 表 2.5 普通选择器(mode=selector)的属性说明

属性类型默认值说明
rangearray/object array[]mode为selector或multiSelector时,range有效
range-keystring当range是一个object array时,通过range-key来指定Object中key的值作为选择器显示内容
valuenumber0value的值表示选择了range中的第几个(下标从0开始)
bindchangeeventHandlevalue改变时触发change事件,event.detail={value:value}

                             表 2.6 多列选择器(mode=multiSelector)的属性说明

属性类型默认值说明
range二维array/二维object array[]mode为selector或multiSelector时,range有效。二维数组,长度表示多少列,数组的每项表示每列的数据,如[["a","b"],["c","d"]]
range-keystring当range是一个object array时,通过二维range-key来指定Object中key的值作为选择器显示内容
valuearray[]value每一项的值表示选择了range中的第几个(下标从0开始)
bindchangeeventhandlevalue改变时触发change事件,event.detail={value:value}
bindcolumnchangeeventhandle某一列的值改变时触发,columnchange事件,event.detail={column:column,value:value},column的值表示改变了第几列(下标从0开始),value的值表示变更值的下标

                                        表 2.7 时间选择器(mode=time)的属性说明

属性类型默认值说明
valuestring表示选中的时间,格式为"hh:mm"
startstring表示有效时间范围的开始,字符串格式为"hh:mm"
endstring表示有效时间范围的结束,字符串格式为"hh:mm"
bindchangeeventhandlevalue改变时触发change事件,event.detail={value:value}

                                       表 2.8 日期选择器(mode=date)的属性说明

属性类型默认值说明
valuestring0表示选中的日期,格式为"YYYY-MM-DD"
startstring表示有效日期范围的开始,字符串格式为"YYYY-MM-DD"
endstring表示有效日期范围的结束,字符串格式为"YYYY-MM-DD"
fieldsstringday有效值year,month,day,表示选择器的粒度
bindchangeeventhandlevalue改变时触发change事件,event.detail={value:value}

                                    表 2.9 省市选择器(mode=region)的属性说明

属性类型默认值说明
valuearray[]表示选中的省市区,默认选中每一列的第一个值
custom-itemstring可为每一列的顶部添加一个自定义的项
bindchangeeventhandlevalue改变时触发change事件,event.detail={value:value,code:code,postcode:postcode},其中字段code时统计用区划代码,postcode时邮政编码

3.案例分析

3.1案例描述

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

3.2实现效果

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

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

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

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

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

(5)所有信息输入和选择完成后点击“确定”按钮,此时将弹出“确认信息”对话框,如图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
    })
  }
})
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

桑桑和阿战

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值