当前位置: 首页 > news >正文

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

文章目录

  • 1.什么是事件传参
  • 2.data-*方式传参
  • 3.mark自定义数据

1.什么是事件传参

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

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

2.data-*方式传参

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

示例:

wxml:

<button bindtap="btuHandler" data-id="1" data-name="zhangsan">事件传参</button>

.js:

Page({btuHandler(e){console.log(e);},
})

结果:
在这里插入图片描述
可以看到有两个地方出现了我们要传递的参数

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

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

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

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

例如:

<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:

<button mark:userid = "1" mark:userName = "zhangsan" bind:tap="markHandler">mark传参</button> 

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

js:

Page({markHandler(e){console.log(e);console.log(e.mark.userid);console.log(e.mark.userName);},
})

运行结果:
在这里插入图片描述
另外使用mark方式通过事件对象获取到的是 触发事件的节点 已经 父节点身上所有的 mark 数据

示例:

wxml:

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

wcss:

view{display: flex;height: 200rpx;background-color: aqua;align-items: center;
}

js:

Page({markHandler(e){console.log(e);},parentHandler(e){console.log(e);},
})

界面如下:
在这里插入图片描述
首先点击蓝色区域,mark数据只有父组件的数据
在这里插入图片描述
点击按钮,可以看到父组件和子组件的数据,同时父组件和子组件的绑定事件方法触发了两次
在这里插入图片描述

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

  • mark 包含从触发事件的节点到根节点上所有的 mark:属性值
  • currentTarget.dataset 或者 target.dataset 只包含事件绑定者 或者 事件触发者那一个节点的 data-*值
http://www.lryc.cn/news/371918.html

相关文章:

  • 前端针对需要递增的固定数据
  • 红酒保存中的氧气管理:适度接触与避免过度氧化
  • 从零开始搭建开源智慧城市项目(三)上升线效果
  • unity基础(五)地形详解
  • postman接口测试工具详解
  • 2024年护网行动全国各地面试题汇总(3)作者:————LJS
  • 计算机专业的学生要达到什么水平才能进入大厂工作?越早知道越好
  • 巡检费时费力?试试AI自动巡检
  • 46-4 等级保护 - 网络安全等级保护概述
  • css引入方式有几种?link和@import有什么区别?
  • 使用‘消除’技术绕过LLM的安全机制,不用训练就可以创建自己的nsfw模型
  • 解决使用elmessage 没有样式的问题
  • pxe批量部署linux介绍
  • RAG 实践-Ollama+AnythingLLM 搭建本地知识库
  • 【超详细】使用RedissonClient实现Redis分布式锁
  • CC攻击的有效应对方案
  • 自动驾驶基础一车辆模型
  • 机器学习:数据分布的漂移问题及应对方案
  • 公链常用的共识算法
  • 详解 Flink Table API 和 Flink SQL 之函数
  • rsa加签验签C#和js以及java互通
  • C语言中数组和指针的关系
  • idea 新建一个 JSP(JavaServer Pages)项目
  • 【名词解释】Unity中的表格布局组件及其使用示例
  • 判断当前设备为移动端自适应 平板和pc端为375移动端样式
  • Science Advances|用于胃部pH监测和早期胃漏检测的生物可吸收无线无源柔性传感器(健康监测/柔性传感/柔性电子)
  • C# 使用 webview2 嵌入网页
  • 公司面试题总结(五)
  • Flutter笔记:关于WebView插件的用法(上)
  • 计算机毕业设计Python+Django农产品推荐系统 农产品爬虫 农产品商城 农产品大数据 农产品数据分析可视化 PySpark Hadoop Hive