微信小程序中wxml事件绑定传参

小程序中wxml事件绑定传参

在wxml中不能在bindtap中直接绑定事件时直接传入参数,html常见的操作例如:

<!--wxml-->
<view bindtap="selectNav(2)">2</view>

<!--js-->
selectNav: function(num){
    console.log(num)
}

会导致:VM27200:1 Component “pages/home/home” does not have a method “selectNav(2)” to handle event "tap"的错误,猜测是将selectNav(2)作为完整字符串去js文件中匹配相关的方法名,匹配失败后返回该报错。

既然不能直接传参,就只能通过属性传参,在bindtap事件触发后,返回的结果如下

changedTouches: [{…}]
currentTarget: {id: "", offsetLeft: 126, offsetTop: 1, dataset: {…}}
detail: {x: 203.8203125, y: 20.98828125}
mark: {}
mut: false
target: {id: "", offsetLeft: 126, offsetTop: 1, dataset: {…}}
timeStamp: 4322
touches: [{…}]
type: "tap"

在target和currentTarget均包含了相关的id和dataset属性。

关于target和currentTarget的区别:event.target指向引起触发事件的元素,而event.currentTarget则是事件绑定的元素,只有被点击的那个目标元素的event.target才会等于event.currentTarget。

所以这里使用currentTarget来绑定相关数据,而id只能绑定一个数据,显然不符合要求。

<!--wxml-->
<view class="nav-item iconfont iconfangjian {{navItem == 2 ? 'active': ''}}" bindtap="selectNav" data-num="2">

<!--js-->
selectNav: function ({ currentTarget }) {
    // console.log(res)
    this.setData({
        "navItem": currentTarget.dataset.num
    })
},

此时bindtap返回结果如下:

changedTouches: [{…}]
currentTarget:
    dataset: {num: "2"}
    id: ""
    offsetLeft: 126
    offsetTop: 1
    __proto__: Object
detail: {x: 174.96875, y: 19.390625}
mark: {}
mut: false
target: {id: "", offsetLeft: 126, offsetTop: 1, dataset: {…}}
timeStamp: 3516
touches: [{…}]
type: "tap"

在selectNav中通过解构赋值, currentTarget.dataset.num获取传递的参数num。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值