微信小程序中data-key属性之数据传输(经验总结)


Posted in Javascript onAugust 22, 2020

本文是总结的一点经验之谈

啥是data-key

微信小程序推出 data- 属性——自定义属性,为了更好的进行数据传递。
总结来说,data-key="{{...}}" 是获取页面中需要用的数据,往js文件(事件)中传—— 被绑定在其组件上的事件使用 也就是常说的:dataset;(比如:wx:for的view中的每一个项的name属性值)
data-key="..." 是从data传到wxml页面中,一般都是在data中存在的属性才这样做,它就是为了“动态修改”data中的属性。

  • 只有data-*传的值才能在事件中被dataset接收,其余的“{{}}”只能使用
  • detaildata-*中不带{{}}时一般都是写好的值,只是用作:不必用data中的数据!

怎么接收data-*的值

如下:

<view bindtap="SetData" data-name="mxc" data-age="18">
 获取数据
</view>

js中:

Page({
 data:{
 name:'',
 age:0
 },
 SetData:function(e){
 console.log(e);
 this.setData({
  name:e.target.dataset.name
 });
 console.log(this.data.name);
 }
})

下面来说几点问题:

上面的程序,在控制台输出:data中的值在event.target.dataset中

微信小程序中data-key属性之数据传输(经验总结)

我们看到,如愿以偿。

那能不能再currentTarget中输出?

准确的说,是:能不能获取currentTarget中的值?
那肯定可以啦!

我们来看官方文档:

微信小程序中data-key属性之数据传输(经验总结)

从中可以看出一个很严重的问题:当前组件触发事件组件
我们都知道,触发事件有 bindtapcatchtap 两种。其中,bindtap可向上(父组件)传递事件
明白了吧?
一般来说, 要想更精确,就用currentTarget;要在一个大组件中有多个触发事件,就可以用target减少事件定义

说说data-绑定数据的坑

你如果在wxml中这么写

<view bindtap='like' data-id='{{laugh.id}}' data-createdBy='{{laugh.created_by}}'>

然后在js中接收:

like(e){
 console.log(e.currentTarget.dataset['createdBy']);
 }

是会出大问题的:它报undefined!

在组件中可以定义数据,这些数据将会通过事件传递给 SERVICE。 书写方式: 以data-开头,多个单词由连字符-链接,不能有大写(大写会自动转成小写)如data-element-type,最终在 event.currentTarget.dataset 中会将连字符转成驼峰elementType。

也就是说小程序自动转了,会把下划线转为大写,大写转为小写。。。(不知道坑了多少人)

like(e){
 console.log(e.currentTarget.dataset['createdby']);
 }

改过之后,世界一片清净…

总结

Javascript 相关文章推荐
使用jQuery全局事件ajaxStart为特定请求实现提示效果的代码
Dec 30 Javascript
基于jquery的15款幻灯片插件
Apr 10 Javascript
JavaScript建立一个语法高亮输入框实现思路
Feb 26 Javascript
使用delegate方法为一个tr标签加一个链接
Jun 27 Javascript
js对象基础实例分析
Jan 13 Javascript
JS实现发送短信验证后按钮倒计时功能(防止刷新倒计时失效)
Jul 07 Javascript
基于 Bootstrap Datetimepicker 联动
Aug 03 Javascript
Angular中sweetalert弹框的基本使用教程
Jul 22 Javascript
JS实现获取当前所在周的周六、周日示例分析
May 11 Javascript
vue canvas绘制矩形并解决由clearRec带来的闪屏问题
Sep 02 Javascript
js中switch语句的学习笔记
Mar 25 Javascript
vue项目中使用多选框的实例代码
Jul 22 Javascript
Vue 电商后台管理项目阶段性总结(推荐)
Aug 22 #Javascript
vue实现移动端H5数字键盘组件使用详解
Aug 25 #Javascript
探究一道价值25k的蚂蚁金服异步串行面试题
Aug 21 #Javascript
js实现页面导航层级指示效果
Aug 25 #Javascript
js实现拖拽元素选择和删除
Aug 25 #Javascript
基于vue实现简易打地鼠游戏
Aug 21 #Javascript
vue实现打地鼠小游戏
Aug 21 #Javascript
You might like
PHP中for循环语句的几种变型
2007/03/16 PHP
php上传文件中文文件名乱码的解决方法
2013/11/01 PHP
PHP 之 写时复制介绍(Copy On Write)
2014/05/13 PHP
PHP中soap的用法实例
2014/10/24 PHP
php查询mysql大量数据造成内存不足的解决方法
2015/03/04 PHP
PHP开发框架laravel安装与配置教程
2015/03/13 PHP
windows平台中配置nginx+php环境
2015/12/06 PHP
详解YII关联查询
2016/01/10 PHP
无语,javascript居然支持中文(unicode)编程!
2007/04/12 Javascript
javascript生成/解析dom的CDATA类型的字段的代码
2007/04/22 Javascript
使用js检测浏览器的实现代码
2013/05/14 Javascript
js获取下拉列表框中的value和text的值示例代码
2014/01/11 Javascript
Js实现无刷新删除内容
2015/04/29 Javascript
详解JavaScript for循环中发送AJAX请求问题
2020/06/23 Javascript
js实现无缝滚动图
2017/02/22 Javascript
Bootstrap页面标题Page Header的实现方法
2017/03/22 Javascript
Angularjs 根据一个select的值去设置另一个select的值方法
2018/08/13 Javascript
vue动画之点击按钮往上渐渐显示出来的实例
2018/09/29 Javascript
layui表单提交到后台自动封装到实体类的方法
2019/09/12 Javascript
Vue 实现拨打电话操作
2020/11/16 Javascript
[05:41]2014DOTA2西雅图国际邀请赛 小组赛7月10日TOPPLAY
2014/07/10 DOTA
Python OpenCV处理图像之滤镜和图像运算
2018/07/10 Python
详解python中的线程与线程池
2019/05/10 Python
详解解决Python memory error的问题(四种解决方案)
2019/08/08 Python
PyQt+socket实现远程操作服务器的方法示例
2019/08/22 Python
Python调用graphviz绘制结构化图形网络示例
2019/11/22 Python
Python根据指定文件生成XML的方法
2020/06/29 Python
Pycharm操作Git及GitHub的步骤详解
2020/10/27 Python
如何设置PyCharm中的Python代码模版(推荐)
2020/11/20 Python
HTML5中外部浏览器唤起微信分享
2020/01/02 HTML / CSS
kmart凯马特官网:美国最大的打折零售商和全球最大的批发商之一
2016/11/17 全球购物
高一政治教学反思
2014/01/28 职场文书
2014两会学习心得:榜样精神伴我行
2014/03/17 职场文书
班子查摆四风个人对照检查材料思想汇报
2014/10/04 职场文书
Java虚拟机内存结构及编码实战分享
2022/04/07 Java/Android
《勇者辞职不干了》上卷BD发售宣传CM公开
2022/04/08 日漫