微信小程序中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工具_Form 封装
Aug 21 Javascript
js去空格技巧分别去字符串前后、左右空格
Oct 21 Javascript
javascript实现图像循环明暗变化的方法
Feb 25 Javascript
跟我学习javascript的var预解析与函数声明提升
Nov 16 Javascript
js命名空间写法示例
Dec 18 Javascript
JavaScript面向对象编写购物车功能
Aug 19 Javascript
Vue $emit $refs子父组件间方法的调用实例
Sep 12 Javascript
微信小程序如何获取群聊的openGid以及名称详解
Jul 17 Javascript
细述Javascript的加法运算符的具体使用
Oct 18 Javascript
vue如何使用async、await实现同步请求
Dec 09 Javascript
Element Dialog对话框的使用示例
Jul 26 Javascript
js实现验证码干扰(静态)
Feb 22 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
虫族 Zerg 魔法科技
2020/03/14 星际争霸
需要注意的几个PHP漏洞小结
2012/02/05 PHP
解析PHP中常见的mongodb查询操作
2013/06/20 PHP
一个php生成16位随机数的代码(两种方法)
2014/09/16 PHP
php类的扩展和继承用法实例
2015/06/20 PHP
Laravel Memcached缓存驱动的配置与应用方法分析
2016/10/08 PHP
?牟┛途W扣了一??效果出?? target=
2007/05/27 Javascript
jQuery图片预加载 等比缩放实现代码
2011/10/04 Javascript
20个最新的jQuery插件
2012/01/13 Javascript
jquery模拟LCD 时钟的html文件源代码
2014/06/16 Javascript
jQuery 仿百度输入标签插件附效果图
2014/07/04 Javascript
JS控制弹出新页面窗口位置和大小的方法
2015/03/02 Javascript
JavaScript使用shift方法移除素组第一个元素实例分析
2015/04/06 Javascript
第八篇Bootstrap下拉菜单实例代码
2016/06/21 Javascript
详解React-Todos入门例子
2016/11/08 Javascript
利用angularjs1.4制作的简易滑动门效果
2017/02/28 Javascript
详解Vuex管理登录状态
2017/11/13 Javascript
jQuery+SpringMVC中的复选框选择与传值实例
2018/01/08 jQuery
Vue中div contenteditable 的光标定位方法
2018/08/25 Javascript
vue2.x集成百度UEditor富文本编辑器的方法
2018/09/21 Javascript
Jquery如何使用animation动画效果改变背景色的代码
2020/07/20 jQuery
vue 判断两个时间插件结束时间必选大于开始时间的代码
2020/11/04 Javascript
天翼开放平台免费短信验证码接口使用实例
2013/12/18 Python
python导出chrome书签到markdown文件的实例代码
2017/12/27 Python
django 发送手机验证码的示例代码
2018/04/25 Python
Python实现的直接插入排序算法示例
2018/04/29 Python
python3中的md5加密实例
2018/05/29 Python
python实现写数字文件名的递增保存文件方法
2018/10/25 Python
Python中使用__new__实现单例模式并解析
2019/06/25 Python
Python BeautifulSoup [解决方法] TypeError: list indices must be integers or slices, not str
2019/08/07 Python
python实现自动清理重复文件
2020/08/24 Python
基于Python爬取股票数据过程详解
2020/10/21 Python
纯css3实现思维导图样式示例
2018/11/01 HTML / CSS
一个J2EE项目团队的主要人员组成是什么
2012/06/04 面试题
财务担保书范文
2014/04/02 职场文书
css实现左上角飘带效果的完整代码
2022/03/18 HTML / CSS