微信小程序中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 相关文章推荐
ExtJS Store的数据访问与更新问题
Apr 28 Javascript
一个通过script自定义属性传递配置参数的方法
Sep 15 Javascript
JavaScript fontsize方法入门实例(按照指定的尺寸来显示字符串)
Oct 17 Javascript
js一维数组、多维数组和对象的混合使用方法
Apr 03 Javascript
JavaScript动态检验密码强度的实现方法
Nov 09 Javascript
JS操作时间 - UNIX时间戳的简单介绍(必看篇)
Aug 16 Javascript
Webpack 之 babel-loader文件预处理器详解
Mar 23 Javascript
使用webpack3.0配置webpack-dev-server教程
May 29 Javascript
Postman的下载及安装教程详解
Oct 16 Javascript
vue实现倒计时获取验证码效果
Apr 17 Javascript
vue路由跳转传递参数的方式总结
May 10 Javascript
JS中箭头函数与this的写法和理解
Jan 14 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 学习资料零碎东西
2010/12/04 PHP
解决php使用异步调用获取数据时出现(错误c00ce56e导致此项操作无法完成)
2013/07/03 PHP
mac下安装nginx和php
2013/11/04 PHP
php使用pdo连接sqlite3的配置示例
2016/05/27 PHP
PHP自定义函数格式化json数据示例
2016/09/14 PHP
[原创]php使用strpos判断字符串中数字类型子字符串出错的解决方法
2017/04/01 PHP
ajax+php实现无刷新验证手机号的实例
2017/12/22 PHP
网站被恶意镜像怎么办 php一段代码轻松搞定(全面版)
2018/10/23 PHP
yii2.0框架使用 beforeAction 防非法登陆的方法分析
2019/09/11 PHP
PHP反射基础知识回顾
2020/09/10 PHP
[JS]点出统计器
2020/10/11 Javascript
jQuery客户端分页实例代码
2013/11/18 Javascript
父页面显示遮罩层弹出半透明状态的dialog
2014/03/04 Javascript
22点关于jquery性能优化的建议
2014/05/28 Javascript
node.js中的url.resolve方法使用说明
2014/12/10 Javascript
weUI应用之JS常用信息提示弹层的封装
2016/11/21 Javascript
jQuery插件JWPlayer视频播放器用法实例分析
2017/01/11 Javascript
React组件之间的通信的实例代码
2017/06/27 Javascript
Vue-cli@3.0 插件系统简析
2018/09/05 Javascript
JS计算斐波拉切代码实例
2019/09/12 Javascript
js脚本中执行java后台代码方法解析
2019/10/11 Javascript
浅谈Python爬取网页的编码处理
2016/11/04 Python
Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例
2019/02/21 Python
Python类绑定方法及非绑定方法实例解析
2020/10/09 Python
python实现磁盘日志清理的示例
2020/11/05 Python
CSS3 实现雷达扫描图的示例代码
2020/09/21 HTML / CSS
英国国家美术馆商店:National Gallery
2019/05/01 全球购物
编写类String 的构造函数、析构函数和赋值函数
2012/09/09 面试题
担保书怎么写
2014/04/01 职场文书
奉献爱心演讲稿
2014/09/04 职场文书
基层党组织整改方案
2014/10/25 职场文书
考试没考好检讨书(精选篇)
2014/11/16 职场文书
应届毕业生自荐信
2015/03/04 职场文书
2016秋季运动会前导词
2015/11/25 职场文书
pandas求平均数和中位数的方法实例
2021/08/04 Python
MySQL Server 层四个日志
2022/03/31 MySQL