微信小程序中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 相关文章推荐
js汉字排序问题 支持中英文混排,兼容各浏览器,包括CHROME
Dec 20 Javascript
jQuery实现表头固定效果的实例代码
May 24 Javascript
原生js仿jquery一些常用方法(必看篇)
Sep 20 Javascript
JavaScript实现二维坐标点排序效果
Jul 18 Javascript
使用angular-cli webpack创建多个包的方法
Oct 16 Javascript
vue + any-touch实现一个iscroll 实现拖拽和滑动动画效果
Apr 08 Javascript
JS实现的贪吃蛇游戏案例详解
May 01 Javascript
在vue中使用vuex,修改state的值示例
Nov 08 Javascript
浅析vue cli3 封装Svgicon组件正确姿势(推荐)
Apr 27 Javascript
Postman内建变量常用方法实例解析
Jul 28 Javascript
vue+vant实现购物车全选和反选功能
Nov 17 Vue.js
在JavaScript中查找字符串中最长单词的三种方法(推荐)
Jan 18 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
第十二节--类的自动加载
2006/11/16 PHP
php表单提交问题的解决方法
2011/04/12 PHP
PHP基于SPL实现的迭代器模式示例
2018/04/22 PHP
javascript中substr,substring,slice.splice的区别说明
2010/11/25 Javascript
js获取GridView中行数据的两种方法 分享
2013/07/13 Javascript
html向js方法传递参数具体实现
2013/08/08 Javascript
js实现按钮控制图片360度翻转特效的方法
2015/02/17 Javascript
NodeJS中利用Promise来封装异步函数
2015/02/25 NodeJs
Javascript中的高阶函数介绍
2015/03/15 Javascript
原生js实现移动端瀑布流式代码示例
2015/12/18 Javascript
详解JS几种变量交换方式以及性能分析对比
2016/11/25 Javascript
深入理解requireJS-实现一个简单的模块加载器
2018/01/15 Javascript
vue-infinite-loading2.0 中文文档详解
2018/04/08 Javascript
el-select 下拉框多选实现全选的实现
2019/08/02 Javascript
微信小程序左右滚动公告栏效果代码实例
2019/09/16 Javascript
vuex 实现getter值赋值给vue组件里的data示例
2019/11/05 Javascript
原生javascript运动函数的封装示例【匀速、抛物线、多属性的运动等】
2020/02/23 Javascript
解决vue组件没显示,没起作用,没报错,但该显示的组件没显示问题
2020/09/02 Javascript
栈和队列数据结构的基本概念及其相关的Python实现
2015/08/24 Python
Python爬虫实例扒取2345天气预报
2018/03/04 Python
用python绘制樱花树
2020/10/09 Python
Python使用cn2an实现中文数字与阿拉伯数字的相互转换
2021/03/02 Python
美国专业级皮肤病和spa品质护肤品的高级零售网站:SkinCareRx
2017/02/06 全球购物
俄罗斯达美乐比萨外送服务:Domino’s Pizza
2020/12/18 全球购物
自主实习接收函
2014/01/13 职场文书
旅游管理毕业生自荐书
2014/02/02 职场文书
幼儿园小班评语
2014/04/18 职场文书
文明市民先进事迹
2014/05/15 职场文书
优秀员工演讲稿
2014/05/19 职场文书
我的中国梦演讲稿600字
2014/08/19 职场文书
市场调研项目授权委托书范本
2014/10/04 职场文书
消防隐患整改通知书
2015/04/22 职场文书
深入浅析React中diff算法
2021/05/19 Javascript
Spring中的使用@Async异步调用方法
2021/11/01 Java/Android
Java实现二分搜索树的示例代码
2022/03/17 Java/Android
SQL Server2019安装的详细步骤实战记录(亲测可用)
2022/06/10 SQL Server