关于微信小程序bindtap传参,有很多博客参考,这里不在赘述,下面放一个示例:
wxml:
<view id="topTabbar">
<view class="option" wx:for="{{options}}" wx:key="index" bind:tap="switchCurrentPage" data-pageIndex="{{index}}">{{item}}</view>
</view>
js:
switchCurrentPage: function(e) {
console.log(e);
let pageIndex = e.currentTarget.dataset.pageindex;
this.setData({
currentPageIndex: pageIndex,
});
},
这里主要说我踩得一个坑,我一开始一直是写:
let pageIndex = e.currentTarget.dataset.pageIndex;
但是控制台输出一直是undefined类型,后面console.log(e),才发现里面的变量名是pageindex.....应该是会自动转成全小写字母,是HTML和DOM标准要求
询问了一下AI,解释如下:
在微信小程序中,当你使用
data-
属性来向组件传递数据时,这些属性在事件对象e
中的dataset
属性里会以小写字母的形式出现,即使在WXML中你定义它们时使用了驼峰命名法(camelCase)。这是因为HTML和DOM标准要求属性名称为小写,而微信小程序的WXML是基于HTML的一个扩展。所以,当你在WXML中使用
data-pageIndex="{{index}}"
时,实际上在JavaScript的事件处理函数中,这个属性会被转换为全小写,即data-pageindex
。这就是为什么你在控制台中看到的是pageIndex
而不是pageIndex
。因此,你需要在事件处理函数中使用
e.currentTarget.dataset.pageindex
来获取传递的参数,而不是e.currentTarget.dataset.pageIndex
。