【微信小程序】事件传参的两种方式

文章目录

1.什么是事件传参

事件传参:在触发事件时,将一些数据作为参数传递给事件处理函数的过程,就是事件传参

在微信小程序中,我们经常会在组件上添加一些自定义数据,然后在事件处理函数中获取这些自定义数据,从而完成业务逻辑的开发.

2.data-*方式传参

在组件上 通过 data-*"的方式 定义需要传递的数据,其中*是自定义的属性,例如:<view data-id="100"bindtap="handler"/>然后通过事件对象进行获取自定义数据

示例:

wxml:

html 复制代码
<button bindtap="btuHandler" data-id="1" data-name="zhangsan">事件传参</button>

.js:

js 复制代码
Page({
  btuHandler(e){
      console.log(e);
  },
})

结果:

可以看到有两个地方出现了我们要传递的参数

  • currentTarget: 事件绑定者,也就是指:哪个组件绑定了当前事件处理函数
  • target: 事件触发者,也就是指:哪个组件触发了当前事件处理函数

因为事件绑定者和事件触发者都是同一个组件,因此通过currentTargettarget都能获取到我们传递的数据.

一般来说,搞清楚时间绑定者和事件触发者,就能够正确获取数据了.实在不行还可以直接打印事件对象,进行数据的查看

有点地方需要注意一下,如果要传递的数据的变量名也带-:

例如:

html 复制代码
<button bindtap="btuHandler" data-user-id="1" data-userName="zhangsan">事件传参</button>

注意这里的ata-user-id="1" data-user-name="zhangsan"

⭐user-id变成了userId(小驼峰),userName变成了username(全小写). 这点需要注意

3.mark自定义数据

小程序进行事件传参的时候,除了使用data-*属性传递参数外,还可以 使用 mark 标记传递参数

mark 是一种自定义属性,可以在组件上添加,用于来识别具体触发事件的 target 节点。同时 mark 还可以用于承载一些自定义数据

然后通过事件对象进行获取自定义数据,在组件上使用 mark:自定义属性 的方式将数据传递给事件处理函数,例如:<view mark:id="100"bindtap="handler" />

示例:

wxml:

html 复制代码
<button mark:userid = "1" mark:userName = "zhangsan" bind:tap="markHandler">mark传参</button> 

注意使用mark不能使用user-id(变量名-变量名)的格式传递数据

js:

css 复制代码
Page({
   markHandler(e){
      console.log(e);
      console.log(e.mark.userid);
      console.log(e.mark.userName);
  },
})

运行结果:

另外使用mark方式通过事件对象获取到的是 触发事件的节点 已经 父节点身上所有的 mark 数据

示例:

wxml:

html 复制代码
<view mark:parentid = "2" mark:parentName = "lisi" bind:tap="parentHandler">
    <button mark:userid = "1" mark:userName = "zhangsan" bind:tap="markHandler">mark传参</button> 
</view>

wcss:

css 复制代码
view{
    display: flex;
    height: 200rpx;
    background-color: aqua;
    align-items: center;
}

js:

js 复制代码
Page({
  markHandler(e){
      console.log(e);
  },
  parentHandler(e){
    console.log(e);
  },
})

界面如下:

首先点击蓝色区域,mark数据只有父组件的数据

点击按钮,可以看到父组件和子组件的数据,同时父组件和子组件的绑定事件方法触发了两次

markdata-*很相似,主要区别在于

  • mark 包含从触发事件的节点到根节点上所有的 mark:属性值
  • currentTarget.dataset 或者 target.dataset 只包含事件绑定者 或者 事件触发者那一个节点的 data-*值
相关推荐
云迈科技-软件定制开发10 小时前
2026年湖南长沙软件定制开发公司怎么选?本地企业做APP、小程序、管理系统的合作参考
小程序
admin and root12 小时前
「移动安全」安卓APP 反编译&frida脱壳技巧分享
android·开发语言·python·web安全·微信小程序·移动安全·攻防演练
m0_462803882 天前
【无标题】
微信小程序
小码哥0682 天前
从三甲综合医院到连锁诊所:医院管理小程序的场景化突围逻辑(陪诊系统-陪诊APP-陪诊小程序)
小程序·医院管理系统·陪诊小程序·陪诊系统·陪诊app
2501_916007472 天前
iOS和macOS应用程序性能分析和优化工具使用综合指南
android·macos·ios·小程序·uni-app·iphone·webview
正在走向自律2 天前
用豆包Seed Evolving打造全功能【AI智能记账】小程序,开源可落地
人工智能·小程序·开源·智能记账
小羊Yveesss3 天前
模板建站哪个平台好?模板数量之外还要比较编辑与SEO能力
大数据·人工智能·小程序
2501_916007473 天前
深入理解HTTPS对称与非对称加密机制及Charles抓包实践
网络协议·http·ios·小程序·https·uni-app·iphone
郑州光合科技余经理3 天前
家政O2O平台解析:从0搭建上门预约小程序解决方案
android·java·开发语言·前端·小程序·架构·php
维双云3 天前
小程序商城制作一个需要多少钱?2026报价明细与成本拆解
小程序