Mustache 语法 ( 双大括号 {{}} )
将变量包起来,从而将数据绑定
在 {{}} 内部可以做一些简单的运算,支持如下几种方式:
注意事项:在 {{}} 语法中,只能写表达式,不能写语句,也不能调用 js 相关的方法
<view>{{school}}</view>
Page({
data: {
school: "北京大学"
}
});
<view>{{obj.name}}</view>
Page({
data: {
obj: {
name: "张三"
}
}
});
<!-- 绑定属性值,如果需要动态绑定一个变量,属性值也需要使用双大括号进行包裹 -->
<view id="{{id}}">绑定属性值</view>
Page({
data: {
id: '1' // 这个值会被绑定到 <view> 元素的 id 属性
}
});
<!-- 如果属性值是布尔值,也需要使用双大括号进行包裹 -->
<checkbox checked="{{ isChecked }}"/>
Page({
data: {
isChecked: true // 初始状态下,复选框是选中的
},
// 假设你有一个方法来改变 isChecked 的值
toggleCheckbox: function() {
this.setData({
isChecked: !this.data.isChecked // 反转选中状态
});
}
});
如果 isChecked 的值为 true,则复选框会被选中;如果为 false,则复选框不会被选中。
<!-- 算术运算符 -->
<view>{{id+1}}</view>
<view>{{id-1}}</view>
<!-- 三元运算 -->
<view>{{id===1?'等于':'不等于'}}</view>
<!-- 逻辑判断 -->
<view>{{id===1}}</view>
Page({
data: {
id: '1' // 这个值会被绑定到 <view> 元素的 id 属性
}
});
<!-- 在双大括号写法内部,只能写表达式,不能写语句,也不能调用 js 的方法 -->
<view>{{if(id===1){}}}</view>
<view>{{for(const i=0;i<=10;i++){}}}</view>
<view>{{obj.name.toUpperCase()}}</view>
在微信小程序中,模板语法并不直接支持复杂的 JavaScript 语句,如 if
语句和 for
循环。这是因为微信小程序的 WXML 模板语言主要用于简单的数据绑定和条件渲染,而不是执行复杂的逻辑。不过,你可以通过一些间接的方法来实现类似的功能。
对于条件渲染,你可以使用 wx:if
或 hidden
属性来实现类似于 if
语句的效果。
wx:if
<view wx:if="{{id === 1}}">ID 等于 1</view>
<view wx:else>ID 不等于 1</view>
hidden
<view hidden="{{id !== 1}}">ID 等于 1</view>
<view hidden="{{id === 1}}">ID 不等于 1</view>
对于循环渲染,你可以使用 wx:for
来遍历数组或对象。
<view wx:for="{{items}}" wx:key="index">
{{item}}
</view>
<view wx:for="{{obj}}" wx:key="key">
{{key}}: {{obj[key]}}
</view>
对于复杂的逻辑处理,比如字符串转换,你可以在页面的 JS 文件中定义方法,然后在 WXML 中调用这些方法。
page.wxml
)<view>{{getUpperCaseName(obj)}}</view>
page.js
)Page({
data: {
obj: {
name: "张三"
}
},
getUpperCaseName: function(obj) {
return obj.name.toUpperCase();
}
});
假设你有一个页面,需要根据 id
的值显示不同的内容,并且需要遍历一个数组,最后将对象的名称转换为大写。
page.wxml
)<!-- 条件渲染 -->
<view wx:if="{{id === 1}}">ID 等于 1</view>
<view wx:else>ID 不等于 1</view>
<!-- 循环渲染 -->
<view wx:for="{{items}}" wx:key="index">
{{item}}
</view>
<!-- 调用方法 -->
<view>{{getUpperCaseName(obj)}}</view>
page.js
)Page({
data: {
id: 1,
items: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
obj: {
name: "张三"
}
},
getUpperCaseName: function(obj) {
return obj.name.toUpperCase();
}
});
条件渲染:
wx:if
和 wx:else
根据 id
的值显示不同的内容。id
等于 1
,则显示 "ID 等于 1"
;否则显示 "ID 不等于 1"
。循环渲染:
wx:for
遍历 items
数组,并显示每个数组元素。wx:key="index"
用于优化列表渲染性能。调用方法:
getUpperCaseName
方法,该方法将对象的 name
属性转换为大写并返回。"ZHANG SAN"
。通过这些方法,你可以在微信小程序中实现复杂的逻辑和动态内容渲染。