微信小程序中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 学习之二 属性(html()与html(val))
Nov 25 Javascript
iframe的onload在Chrome/Opera中执行两次Bug的解决方法
Mar 17 Javascript
EXTJS FORM HIDDEN TEXTFIELD 赋值 使用value不好用的问题
Apr 16 Javascript
jquery 列表双向选择器之改进版
Aug 09 Javascript
javascript模拟枚举的简单实例
Mar 06 Javascript
node.js中的fs.fsyncSync方法使用说明
Dec 15 Javascript
jquery实现ajax提交表单信息的简单方法(推荐)
Aug 24 Javascript
angularJS 指令封装回到顶部示例详解
Jan 22 Javascript
实例详解JavaScript中setTimeout函数的执行顺序
Jul 12 Javascript
JavaScript设计模式之命令模式实例分析
Jan 16 Javascript
浅谈小程序 setData学问多
Feb 20 Javascript
小程序组件之自定义顶部导航实例
Jun 12 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
ThinkPHP中的常用查询语言汇总
2014/08/22 PHP
php中Ctype函数用法详解
2014/12/09 PHP
PHP设计模式之观察者模式实例
2016/02/22 PHP
Yii实现复选框批量操作实例代码
2017/03/15 PHP
W3C Group的JavaScript1.8 新特性介绍
2009/05/19 Javascript
用document.documentElement取代document.body的原因分析
2009/11/12 Javascript
数组Array进行原型prototype扩展后带来的for in遍历问题
2010/02/07 Javascript
jquery Tab效果和动态加载的简单实例
2013/12/11 Javascript
JavaScript类属性的访问方式详解
2014/02/11 Javascript
JS控制输入框内字符串长度
2014/05/21 Javascript
node.js中的fs.fstatSync方法使用说明
2014/12/15 Javascript
Javascript中 带名 匿名 箭头函数的重要区别(推荐)
2017/01/29 Javascript
Canvas实现动态的雪花效果
2017/02/13 Javascript
使用AngularJS2中的指令实现按钮的切换效果
2017/03/27 Javascript
mongoose中利用populate处理嵌套的方法
2017/05/26 Javascript
vue 2.0项目中如何引入element-ui详解
2017/09/06 Javascript
在vue中,v-for的索引index在html中的使用方法
2018/03/06 Javascript
JS获取浏览器地址栏的多个参数值的任意值实例代码
2018/07/24 Javascript
详解vue如何使用rules对表单字段进行校验
2018/10/17 Javascript
vue+iview动态渲染表格详解
2019/03/19 Javascript
微信小程序canvas分享海报功能
2019/10/31 Javascript
node.js 微信开发之定时获取access_token
2020/02/07 Javascript
在react-antd中弹出层form内容传递给父组件的操作
2020/10/24 Javascript
Python实现股市信息下载的方法
2015/06/15 Python
python获取酷狗音乐top500的下载地址 MP3格式
2018/04/17 Python
对Python3.6 IDLE常用快捷键介绍
2018/07/16 Python
flask session组件的使用示例
2018/12/25 Python
python 限制函数执行时间,自己实现timeout的实例
2019/01/12 Python
python数据挖掘需要学的内容
2019/06/23 Python
整理HTML5的一些新特性与Canvas的常用属性
2016/01/29 HTML / CSS
DTD的含义以及作用
2014/01/26 面试题
业务部主管岗位职责
2014/01/29 职场文书
会计岗位描述
2014/02/22 职场文书
教师三严三实学习心得体会
2014/10/11 职场文书
助学感谢信范文
2015/01/21 职场文书
小组口号霸气押韵
2015/12/24 职场文书