微信小程序中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 相关文章推荐
JSON JQUERY模板实现说明
Jul 03 Javascript
js实现拖拽 闭包函数详细介绍
Nov 25 Javascript
用jquery生成二级菜单的实例代码
Jun 24 Javascript
JS+CSS相对定位实现的下拉菜单
Oct 06 Javascript
js实现异步循环实现代码
Feb 16 Javascript
Js 获取当前函数参数对象的实现代码
Jun 20 Javascript
快速掌握jQuery插件开发
Jan 19 Javascript
js中document.referrer实现移动端返回上一页
Feb 22 Javascript
Angualrjs 表单验证的两种方式(失去焦点验证和点击提交验证)
May 09 Javascript
微信小程序实现tab和swiper切换结合效果
Jul 17 Javascript
详解Vue中localstorage和sessionstorage的使用
Dec 22 Javascript
解决vue2中使用axios http请求出现的问题
Mar 05 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四种url访问方式详解
2014/11/28 PHP
ThinkPHP+EasyUI之ComboTree中的会计科目树形菜单实现方法
2017/06/09 PHP
PHP substr()函数参数解释及用法讲解
2017/11/23 PHP
Laravel 模型关联基础教程详解
2019/09/17 PHP
PHP 8新特性简介
2020/08/18 PHP
jQuery 联动日历实现代码
2012/05/31 Javascript
js 实现菜单左右滚动显示示例介绍
2013/11/21 Javascript
教你用jquery实现iframe自适应高度
2014/06/11 Javascript
JS实现鼠标点击展开或隐藏表格行的方法
2015/03/03 Javascript
JavaScript通过setTimeout实时显示当前时间的方法
2015/04/16 Javascript
jQuery实现弹出窗口中切换登录与注册表单
2015/06/05 Javascript
Bootstrap框架动态生成Web页面文章内目录的方法
2016/05/12 Javascript
JavaScript中的冒泡排序法
2016/08/03 Javascript
JS查找字符串中出现次数最多的字符
2016/09/05 Javascript
BootStrap Tooltip插件源码解析
2016/12/27 Javascript
实战node静态文件服务器的示例代码
2018/03/08 Javascript
浅谈微信小程序flex布局基础
2018/09/10 Javascript
微信小程序开发之tabbar图标和颜色的实现
2018/10/17 Javascript
js实现通过开始结束控制的计时器
2019/02/25 Javascript
微信小程序页面间传递数组对象方法解析
2019/11/06 Javascript
js实现滑动滑块验证登录
2020/07/24 Javascript
如何在Vue.JS中使用图标组件
2020/08/04 Javascript
python基础之入门必看操作
2017/07/26 Python
python可视化实现代码
2019/01/15 Python
三步实现Django Paginator分页的方法
2019/06/11 Python
利用python在大量数据文件下删除某一行的例子
2019/08/21 Python
浅谈css3新单位vw、vh、vmin、vmax的使用详解
2017/12/01 HTML / CSS
物业门卫岗位职责
2013/12/28 职场文书
党校培训思想汇报
2013/12/30 职场文书
大学生党员自我批评思想汇报
2014/10/10 职场文书
作风建设年度心得体会
2014/10/29 职场文书
实习推荐信格式模板
2015/03/27 职场文书
红领巾广播站广播稿
2015/08/19 职场文书
Html5调用企业微信的实现
2021/04/16 HTML / CSS
Java获取e.printStackTrace()打印的信息方式
2021/08/07 Java/Android
Win10 最新稳定版本 21H2开始推送
2022/04/19 数码科技