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

 更新时间:2020年08月22日 11:19:34   作者:行舟客  
这篇文章主要介绍了微信小程序中data-key属性:数据传输,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

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

啥是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中

在这里插入图片描述

我们看到,如愿以偿。

那能不能再currentTarget中输出?

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

我们来看官方文档:

在这里插入图片描述

从中可以看出一个很严重的问题:当前组件触发事件组件
我们都知道,触发事件有 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']);
 }

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

总结

相关文章

  • 详解数组Array.sort()排序的方法

    详解数组Array.sort()排序的方法

    JavaScript中数组的sort()方法主要用于对数组的元素进行排序。其中,sort()方法有一个可选参数。接下来通过本文给大家介绍数组Array.sort()排序的方法,需要的朋友参考下
    2017-03-03
  • JS中用三种方式实现导航菜单中的二级下拉菜单

    JS中用三种方式实现导航菜单中的二级下拉菜单

    我们在淘宝、搜狐等大型网站上都可以看到使用的一些二级下拉菜单,比如下面这张图片。那么如何实现导航菜单栏中的二级下拉菜单呢?下面小编给大家分享JS中用三种方式实现导航菜单中的二级下拉菜单,感兴趣的朋友一起看看吧
    2016-10-10
  • Javascript农历与公历相互转换的简单实例

    Javascript农历与公历相互转换的简单实例

    下面小编就为大家带来一篇Javascript农历与公历相互转换的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • javascript中利用柯里化函数实现bind方法【推荐】

    javascript中利用柯里化函数实现bind方法【推荐】

    下面小编就为大家带来一篇javascript中利用柯里化函数实现bind方法【推荐】。小编觉得挺不错的,现在分享给大家,也给大家做个参考,一起跟随小编过来看看吧
    2016-04-04
  • javascript实现图像循环明暗变化的方法

    javascript实现图像循环明暗变化的方法

    这篇文章主要介绍了javascript实现图像循环明暗变化的方法,实例分析了javascript操作css样式的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • JsonServer安装及启动过程图解

    JsonServer安装及启动过程图解

    这篇文章主要介绍了JsonServer安装及启动过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • 解决typescript项目报错:找不到模块“xxx”或其相应的类型声明问题

    解决typescript项目报错:找不到模块“xxx”或其相应的类型声明问题

    这篇文章主要介绍了解决typescript项目报错:找不到模块“xxx”或其相应的类型声明问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • JS中作用域和变量提升(hoisting)的深入理解

    JS中作用域和变量提升(hoisting)的深入理解

    相信大家也都发现了,在网上关于JS的变量和作用域的文章有很多,但真正能讲清楚,能深入理解的文章很少。在阅读了很多人的文章以后,我决定综合起来,结合实际代码,希望能够以一个比较清楚完整的方式让大家真正理解。有需要的朋友们下面来一起看看吧。
    2016-10-10
  • JavaScript delete 属性的使用

    JavaScript delete 属性的使用

    JavaScript对象数据结构基本形式:{ key : value},其中key:value就为对象的一个属性,key作为属性名称,value为属性值,这值可以是任何JavaScript数据类型。
    2009-10-10
  • 手把手教你做超酷的条形码效果

    手把手教你做超酷的条形码效果

    手把手教你做超酷的条形码效果...
    2007-04-04

最新评论