WXML模板语法-事件绑定
1.什么是事件
事件是渲染层到逻辑层的通讯方式。通过事件可以将用户在渲染层产生的行为,反馈到逻辑层进行业务的处理。
2.小程序中常用的事件
类型 | 绑定方式 | 事件描述 |
---|---|---|
tap | bindtip或bind.tap | 手指触摸后马上离开,类似于HTML中的click事件 |
input | bindinput或bind.inpiut | 文本框的输入事件 |
change | bindchange或bind.change | 状态改变时触发 |
3.事件对象的属性列表
当事件回到触发的时候,会收到一个事件对象event,它的详细属性如下表所示:
属性 | 类型 | 说明 |
---|---|---|
type | String | 事件类型 |
timeStamp | Integer | 页面打开到触发事件所经过的毫秒数 |
target | Object | 触发事件的组件的一些属性值的集合 |
currentTarget | Object | 当前组件的一些属性值集合 |
detail | Object | 额外的信息 |
touches | Array | 触摸事件,当前停留在屏幕中的触摸点信息的数组 |
changeTouches | Array | 触摸事件,当前变化的触摸点信息的数组 |
注:加粗为常用项
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事件
来响应用户的触摸行为。
- 通过
bindtap
,可以为组件绑定tap触摸事件,语法如下:
<button type="primary" bindtap="btnTapHandler">按钮</button>
- 在页面的.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事件来响应文本框的输入事件,语法格式如下:
- 通过bindinput,可以为文本输入框绑定输入事件:
<input bindinput="inputHandler"></input>
- 在页面的.js文件中定义事件处理函数:
inputHandler(e){
//e.detail.value是变化过后,文本框的最新值
console.log(e.detail.value)
}
9.实现文本框和data之间的数据同步
实现步骤:
- 定义数据
- 渲染结构
- 美化样式
- 绑定input事件处理函数
定义数据:
Page({
data:{
msg:'你好'
}
})
渲染结构:
<input value="{{msg}}" bindinput="iptHandler"></input>
美化样式:
input{
border:1px solid #eee;
padding:5px;
margin:5px;
border-radius:3px
}
绑定input事件处理函数:
//文本框内容改变的事件
iptHandler(e){
this.setData({
//通过e.detail.value获取到文本框最新的值
msg:e.detail.value
})
}