微信小程序中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 相关文章推荐
Tinymce+jQuery.Validation使用产生的BUG
Mar 29 Javascript
jQuery jcrop插件截图使用方法
Nov 20 Javascript
简介JavaScript中strike()方法的使用
Jun 08 Javascript
JavaScript中数据结构与算法(一):栈
Jun 19 Javascript
JavaScript定时器实现的原理分析
Dec 06 Javascript
ionic cordova一次上传多张图片(类似input file提交表单)的实现方法
Dec 16 Javascript
jQuery扩展_动力节点Java学院整理
Jul 05 jQuery
在原生不支持的旧环境中添加兼容的Object.keys实现方法
Sep 11 Javascript
详解如何实现一个简单的Node.js脚手架
Dec 04 Javascript
vue实现分页组件
Jun 16 Javascript
JS实现字体背景跑马灯
Jan 06 Javascript
JS寄快递地址智能解析的实现代码
Jul 16 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
asp和php下textarea提交大量数据发生丢失的解决方法
2008/01/20 PHP
php自动适应范围的分页代码
2008/08/05 PHP
Php 构造函数construct的前下划线是双的_
2009/12/08 PHP
laravel实现上传图片的两种方式小结
2019/10/12 PHP
laravel 实现关闭CSRF(全部关闭、部分关闭)
2019/10/21 PHP
Yii Framework框架开发微信公众平台示例
2020/04/26 PHP
提交表单时执行func方法实现代码
2013/03/17 Javascript
JavaScript splice()方法详解
2020/09/22 Javascript
绑定回车enter事件代码
2014/05/18 Javascript
jQuery幻灯片带缩略图轮播效果代码分享
2015/08/17 Javascript
JavaScript下的时间格式处理函数Date.prototype.format
2016/01/27 Javascript
基于jQuery实现以手风琴方式展开和折叠导航菜单
2016/01/28 Javascript
Jquery实现select multiple左右添加和删除功能的简单实例
2016/05/26 Javascript
JavaScript实现星级评分
2017/01/12 Javascript
完美解决input[type=number]无法显示非数字字符的问题
2017/02/28 Javascript
vue生成随机验证码的示例代码
2017/09/29 Javascript
elementui的默认样式修改方法
2018/02/23 Javascript
基于vue中对鼠标划过事件的处理方式详解
2018/08/22 Javascript
原生js实现瀑布流效果
2020/03/09 Javascript
Vue列表循环从指定下标开始的多种解决方案
2020/04/08 Javascript
JavaScript实时更新当前的时间的示例代码
2020/07/15 Javascript
vue中实现点击空白区域关闭弹窗的两种方法
2020/12/30 Vue.js
[01:03]悬念揭晓 11月26日DOTA2完美盛典不见不散
2017/11/23 DOTA
Python中的CURL PycURL使用例子
2014/06/01 Python
Python基础教程之浅拷贝和深拷贝实例详解
2017/07/15 Python
python如何去除字符串中不想要的字符
2020/07/05 Python
浅析Python函数式编程
2018/10/06 Python
使用python对文件中的单词进行提取的方法示例
2018/12/21 Python
python抓取搜狗微信公众号文章
2019/04/01 Python
django中forms组件的使用与注意
2019/07/08 Python
详解Python文件修改的两种方式
2019/08/22 Python
C,C++的几个面试题小集
2013/07/13 面试题
师德先进个人材料
2014/12/20 职场文书
市场部经理岗位职责
2015/02/02 职场文书
使用Pytorch实现two-head(多输出)模型的操作
2021/05/28 Python
关于python中模块和重载的问题
2021/11/02 Python