WXML模板语法
WXML模板语法
数据绑定
数据绑定的基本原则
- 在data中定义数据
- 在WXML中使用数据
在data中定义页面数据
在页面对应的js文件中,把数据定义到data对象中即可
1 | Page({ |
Mustache语法的格式
把发他中的数据绑定到页面中渲染,使用Mustache语法(双大括号)将变量包起来即可
1 | <view>{{要绑定的数据名称}}</view> |
应用场景:
- 绑定内容
- 绑定属性
- 运算(三元运算,算数运算等)
动态绑定内容
页面的数据如下
1 | Page({ |
页面的结构如下
1 | <view>{{ info }}</view> |
动态绑定属性
页面的数据如下
1 | Page({ |
页面的结构如下
1 | <image src="{{imgSrc}}"></image> |
三元运算
页面数据
1 | Page({ |
页面结构
1 | <view>{{ randomNumber >= 5 ? '随机数字大于或等于5' : '随机数字小于5'}}</view> |
算数运算
页面数据
1 | Page({ |
页面结构
1 | <view>生成100以内的随机数:{{randomNum*100}}</view> |
事件绑定
事件概述
事件是渲染层到逻辑层的通讯方式,通过事件可以将用户在渲染层产生的行为,反馈到逻辑层进行业务的处理

小程序中常用事件
| 类型 | 绑定方式 | 事件描述 |
|---|---|---|
| tap | bindtap或 bind:tap | 手指触摸后马上离开,类似HTML中click事件 |
| input | bindinput或 bind:input | 文本框的输入事件 |
| change | bindchange或 bind:change | 状态改变时触发 |
事件对象属性
当事件回调触发时,会收到事件对象event,它的详细属性如下
| 属性 | 类型 | 说明 |
|---|---|---|
| type | String | 事件类型 |
| timeStamp | Integer | 页面打开到触发事件时所经过的毫秒数 |
| target | Object | 触发事件的组件的一些属性值的集合 |
| currentTarget | Object | 当前组件的一些属性值集合 |
| detail | Object | 额外的信息 |
| touches | Array | 触摸事件,当停留在屏幕中的触摸点信息的数组 |
| changedTouches | Array | 触摸事件,当前变化时触摸点信息的数组 |
target和currentTarget的区别
target是触发该事件的源头组件,而currentTarget是当前事件所绑定的组件
bindtap的语法格式
小程序中不存在onclick点击事件,而是通过tap事件响应用户的触摸
通过bindtap,可以为组件绑定tap触摸事件,语法如下
1
<button type="primary" bindtap="btnTapHandler">按钮</button>
在页面中的js文件中定义对应的事件处理函数,事件参数通过形参event(一般简写e)来接收
1
2
3
4
5
6Page({
btnTapHandler(e) { //按钮的tap事件处理函数
console.log(e) //事件参数对象
}
})
在事件处理函数中为data中的数据赋值
通过调用this.setData(dataObject)方法,可以给页面data中的数据重新赋值,示例如下
1 | // 页面的js文件 |
事件传参
可以为组件data-*自定义属性传参,其中*代表的是参数的名字,示例如下
1 | <button bindtap="btnHandler" data-info="{{2}}">事件传参</button> |
- info会被解析为参数的名字
- 数值2会被解析成参数的值
在事件处理函数中,通过event.target.dataset.参数名即可获取到具体参数的值,示例代码如下
1 | btnHandler(e) { |
bindinput的语法格式
在小程序中,通过input事件来响应文本框的输入事件,语法格式如下
通过bindinput,可以为文本框绑定输入事件
1
<input bindinput="inputHandler"></input>
在页面js文件中定义事件处理函数
1
2
3
4inputHandler(e) {
// e.detail.value 是变化过后,文本框最新的值
console.log(e.detail.value)
}
实现文本框和data之间的数据同步
- 定义数据
- 渲染结构
- 美化样式
- 绑定input事件处理函数
渲染结构
1 | <input value="{{msg}}" bindinput="iptHandler"></input> |
美化样式
1 | input { |
绑定input事件处理函数
1 | // 文本框内容改变的事件 |
条件渲染
1. wx:if
在小程序中,使用wx:if="{{condition}}"来判断是否需要渲染该代码块
1 | <view wx:if="">True</view> |
也可以利用wx:elif和wx:else来添加else判断
1 | <view wx:if="{{type === 1}}">男</view> |
2.结合<block>使用 wx:if
如果要一次性控制多个组件的展示与隐藏,可以使用一个<block></block>标签将多个组件包装起来,并在<block>标签上使用wx:if控制属性,示例如下
1 | <block> |
<block>并不是一个组件,它只是一个包裹性质的容器,不会在页面中做任何渲染
3.hidden
在小程序中,直接使用hidden="{{condition}}"也能控制元素的显示与隐藏
1 | <view hidden="{{consition}}"> |
4.wx:if与hidden的对比
运行方式不同
wx:if以动态创建和移除元素的方式,控制元素的显示与隐藏hidden以切换样式的方式(display:none/block;),控制元素的显示与隐藏
使用建议
- 频繁切换时,建议使用
hidden - 控制条件复杂时,建议使用
wx:if搭配wx:elif,wx:else进行展示与隐藏的切换
列表渲染
1.wx:for
通过wx:for可以根据指定的数组,循环渲染重复的组件结构,语法示例如下
1 | <view wx:for="{{array}}"> |
默认情况下,当前循环项的索引用index表示,当前循环项用item表示
3.手动指定索引和当前项的变量名
- 使用
wx:for-index可以指定当前循环项的索引的变量名 - 使用
wx:for-item可以指定当前项的变量名
1 | <view wx:for="{{array}}" wx:for-index="idx" wx:for-item="itemName"> |
3.wx:key的使用
类似于Vue列表渲染中的:key,小程序在实现列表渲染时,也建议为渲染出来的列表项指定唯一的key值,从而提高渲染效率
1 | // data数据 |
1 | // WXML结构 |



