模板WXML
- 标签名字有点不一样
HTML标签 div, p, span等
小程序WXML view, button, text等 - 多了一些 wx:if 这样的属性(界面及状态的控制)以及 {{ }} 这样的表达式(数据绑定)
- MVVM 的开发模式(例如 React, Vue),提倡把渲染和逻辑分离
WXML是框架设计的⼀套标签语⾔,结合基础组件、事件系统,可以构建出⻚⾯的结构
数据绑定
(一)普通写法
index.wxml
<view> {{ message }} </view>
(二)组件属性
index.wxml
<view id="item-{{id}}"> </view>
index.js
Page({
data: {
message: 'Hello MINA!'
}
})
(三)bool类型
不要直接写 checked=“false”,其计算结果是⼀个字符串
<checkbox checked="{{false}}"> </checkbox>
5.2 运算
(一)三元运算
<view hidden="{{flag ? true : false}}"> Hidden </view>
(二)if 逻辑判断
<view wx:if="{{length > 5}}"> </view>
注意:花括号和引号之间如果有空格,将最终被解析成为字符串,切记不要留有空格
5.3 列表渲染
(一)wx:for
- 项的变量名默认为 item wx:for-item 可以指定数组当前元素的变量名
- 下标变量名默认为 index wx:for-index 可以指定数组当前下标的变量名
- wx:key ⽤来提⾼数组渲染的性能
- wx:key 绑定的值 有如下选择: string类型,表⽰循环项中的唯⼀属性 如
list:[{id:0,name:"炒饭"},{id:1,name:"炒面"}]
wx:key="id"
保留字 *this ,它的意思是 item 本⾝ ,*this 代表的必须是 唯⼀的字符串和数组。
list:[1,2,3,4,5]
wx:key="*this"
<view wx:for="{{array}}" wx:key="id">
{{index}}: {{item.message}}
</view>
Page({
data: {
array: [{
id:0,
message: 'foo',
}, {
id:1,
message: 'bar'
}]
}
})
(二)block
渲染⼀个包含多节点的结构块 block最终不会变成真正的dom元素
<block wx:for="{{[1, 2, 3]}}" wx:key="*this" >
<view> {{index}}: </view>
<view> {{item}} </view>
</block>
5.4 条件渲染
(一)wx:if
在框架中,使⽤ wx:if=“{{condition}}” 来判断是否需要渲染该代码块:
<view wx:if="{{false}}">1</view>
<view wx:elif="{{true}}">2</view>
<view wx:else>3</view>
(二)hidden(类似 wx:if)
<view hidden="{{condition}}"> True </view>
频繁切换 ⽤ hidden
不常使⽤ ⽤ wx:if
5.5 事件绑定
⼩程序中绑定事件,通过bind关键字来实现。如 bindtap bindinput bindchange 等
代码:
<!-- 1.需要给input标签绑定 input事件
绑定关键字 bindinput
2.如何获取输入框的值
通过事件源对象获取e.detail.value
3.把输入框的值赋值到data中
错误:this.data.num = e.detail.value
正确:
this.setData({
num: e.detail.value
})
4.需要加入一个点击事件
bindtab
无法在小程序中的事件直接传参
通过自定义属性的方式传递参数
事件源中获取自定义属性 -->
<input type="text" bindinput="handleInput"/>
<button bindtab="handleTab" data-operation="{{1}}">+</button>
<button bindtab="handleTab" data-operation="{{-1}}">-</button>
<view>{{num}}</view>
Page({
data: {
num: '0'
},
handleInput(e) {
// 绑定的事件
console.log(e)
console.log(e.detail.value);
this.setData({
num: e.detail.value
})
},
// 加减按钮事件
handleTab(e) {
console.log(e);
// 获取自定义属性operation
const operation = e.currentTarget.dataset.operation
this.setData({
num: this.data.num + operation
})
}
})