乐于分享
好东西不私藏

WXML模板语法--事件绑定

WXML模板语法--事件绑定

1.什么是事件

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

2.小程序中常用的事件

类型

绑定方式

事件描述

tap

bindtap 或 bind:tap

手指触摸后马上离开,类似于 HTML中的click事件

input

bindinput 或 bind:input

文本框的输入事件

change

bindchange 或 bind:change

状态改变时触发

3.事件对象的属性列表

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

属性

类型

说明

type

String

事件类型

timeStamp

Integer

页面打开到触发事件所经过的亳秒数

target

Object

触发事件的组件的一些属性值集合

currentTarget

Object

当前组件的一些属性值集合

detail

Object

额外的信息

touches

Array

触摸事件,当前停留在屏幕中的触摸点信息的数组

changedTouches

Array

触摸事件,当前变化的触摸点信息的数组

4.target 和currentTarget 的区别

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

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

此时,对于外层的 view 来说:

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

5.bindtap 的语法格式

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

① 通过 bindtap,可以为组件绑定 tap 触摸事件,语法如下:

按钮

② 在页面的 .s 文件中定义对应的事件处理函数,事件参数通过形参 event(一般简写成e)来接收:

Page({  btnTapHandler(e){		//按钮的 tap 事件处理函数  console.log(e)		//事件参数对象 e    }})

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

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

//页面的.js 文件Page({  data:{    count:0    },//修改 count 的值changeCount(){  this.setData({    count: this.data.count + 1    })  }})

7.事件传参

小程序中的事件传参比较特殊,不能在绑定事件的同时为事件处理函数传递参数。例如,下面的代码将不能正常工作:

事件传参

因为小程序会把 bindtap 的属性值,统一当作事件名称来处理,相当于要调用一个名称为 btnHandler(123)的事件处理函数。

可以为组件提供 data-*自定义属性传参,其中*代表的是参数的名字,示例代码如下

事件传参

最终:

  • info 会被解析为参数的名字
  • 数值 2 会被解析为参数的值

在事件处理函数中,通过 event.target.dataset.参数名 即可获取到具体参数的值,示例代码如下:

btnHandler(event){//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.datail.value 是变化过后,文本框最新的值  console.log(e.detail.value)}

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

实现步骤:

  1. 定义数据
Page({  data: {    msg: '你好, '  }})
  1. 渲染结构
  1. 美化样式
input {  border1px solid #eee;  padding5px;  margin5px;  border-radius3px;}
  1. 绑定 input 事件处理函数
//文本框内容改变的事件inputHandler(e){  this.setData({//通过 e.detail.value 获取到文本框最新的值  msg: e.detail.value  })}