微信小程序学习笔记-事件绑定

72 阅读3分钟

WXML模板语法-事件绑定

1.什么是事件

事件是渲染层到逻辑层的通讯方式。通过事件可以将用户在渲染层产生的行为,反馈到逻辑层进行业务的处理。

2.小程序中常用的事件

类型绑定方式事件描述
tapbindtip或bind.tap手指触摸后马上离开,类似于HTML中的click事件
inputbindinput或bind.inpiut文本框的输入事件
changebindchange或bind.change状态改变时触发

3.事件对象的属性列表

当事件回到触发的时候,会收到一个事件对象event,它的详细属性如下表所示:

属性类型说明
typeString事件类型
timeStampInteger页面打开到触发事件所经过的毫秒数
targetObject触发事件的组件的一些属性值的集合
currentTargetObject当前组件的一些属性值集合
detailObject额外的信息
touchesArray触摸事件,当前停留在屏幕中的触摸点信息的数组
changeTouchesArray触摸事件,当前变化的触摸点信息的数组

注:加粗为常用项

4.target与currentTarget的区别

target触发该事件的源头组件,而currentTarget则是当前事件所绑定的组件。举例如下:

<view bindtap="outerHandler">
    <button>按钮</button>
</view>

点击内部的按钮时,点击的事件以冒泡的方式向外扩散,也会触发外层view的tap事件处理函数。 此时,对于外层的view来说:

  • e.target指向触发事件的源头组件,因此,e.target是内部的按钮组件
  • e.currentTarget指的是当前正在触发事件的那个组件,因此,e.currentTarget是当前的view组件

5.bindtap的语法格式

在小程序中,不存在HTML中的onclick鼠标点击事件,而是通过tap事件来响应用户的触摸行为。

  1. 通过bindtap,可以为组件绑定tap触摸事件,语法如下:
<button type="primary" bindtap="btnTapHandler">按钮</button>
  1. 在页面的.js文件中定义对应的事件处理函数,事件参数通过形参event(一般简写成e)来接收:
Page({
btnTapHandler(e){ //按钮的tap事件处理函数
console.log(e) //事件参数对象e
}
})

6.在事件处理函数中为data中的数据赋值

通过调用this.setData(dataObject)方法,可以给页面data中的数据重新赋值,示例如下:

Page({
    data:{
        count:0
          },
        changeCount(){
        this.setData({
        count:this.data.count + 1
        })
    }
})

7.事件传参

小程序不能在绑定事件时进行传参。可以用组件提供的'data-xxx'自定义传参,其中xxx代表参数的名字,示例代码如下:

<button bindtap="btnHandler" data-info="{{2}}">事件传参</button>

最终:

  • info会解析成参数的名字
  • 数字2会被解析成参数的值 在事件处理函数中,通过event.target.dataset.参数名即可获取到具体参数的值,示例代码如下:
btnHandler(enevt){
//dataset是一个对象,包含了所有通过data-*传递过来的参数项
console.log(event.target.dataset)
//通过dataset可以访问到具体参数的值
console.log(event.target.dataset.info)
}

8.bindinput的语法格式

在小程序中,通过input事件来响应文本框的输入事件,语法格式如下:

  1. 通过bindinput,可以为文本输入框绑定输入事件:
<input bindinput="inputHandler"></input>
  1. 在页面的.js文件中定义事件处理函数:
inputHandler(e){
//e.detail.value是变化过后,文本框的最新值
console.log(e.detail.value)
}

9.实现文本框和data之间的数据同步

实现步骤:

  1. 定义数据
  2. 渲染结构
  3. 美化样式
  4. 绑定input事件处理函数

定义数据:

Page({
data:{
msg:'你好'
}
})

渲染结构:

<input value="{{msg}}" bindinput="iptHandler"></input>

美化样式:

input{
border1px solid #eee;
padding:5px;
margin:5px;
border-radius:3px
}

绑定input事件处理函数:

//文本框内容改变的事件
iptHandler(e){
    this.setData({
        //通过e.detail.value获取到文本框最新的值
        msg:e.detail.value
    })
}