微信小程序中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实现带搜索功能的下拉框实时搜索实时匹配
Nov 05 Javascript
js限制文本框只能输入中文的方法
Aug 11 Javascript
js数组常见操作及数组与字符串相互转化实例详解
Nov 10 Javascript
uploadify多文件上传参数设置技巧
Nov 16 Javascript
基于bootstrap实现广告轮播带图片和文字效果
Jul 22 Javascript
详解AngularJS如何实现跨域请求
Aug 22 Javascript
es6学习笔记之Async函数基本教程
May 11 Javascript
Node+OCR实现图像文字识别功能
Nov 26 Javascript
JavaScript闭包相关知识解析
Oct 19 Javascript
解决Vue 刷新页面导航显示高亮位置不对问题
Dec 25 Javascript
VUE实现自身整体组件销毁的示例代码
Jan 13 Javascript
JavaScript实现简单的图片切换功能(实例代码)
Apr 10 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
开发大型 PHP 项目的方法
2007/01/02 PHP
PHP内核探索:变量概述
2014/01/30 PHP
PHP在线打包下载功能示例
2016/10/15 PHP
php 防止表单重复提交两种实现方法
2016/11/03 PHP
js 提交和设置表单的值
2008/12/19 Javascript
jQuery chili图片远处放大插件
2009/11/30 Javascript
基于JQuery的Select选择框的华丽变身
2011/08/23 Javascript
如何正确使用javascript 来进行我们的程序开发
2014/06/23 Javascript
Node.js文件操作详解
2014/08/16 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(下)
2015/10/28 Javascript
JS匿名函数类生成方式实例分析
2016/11/26 Javascript
如何实现星星评价(jquery.raty.js插件)
2016/12/21 Javascript
JS实现超简单的汉字转拼音功能示例
2016/12/22 Javascript
jQuery设置和获取select、checkbox、radio的选中值方法
2017/01/01 Javascript
js实现消息滚动效果
2017/01/18 Javascript
详解Angular4中路由Router类的跳转navigate
2017/06/09 Javascript
解读vue生成的文件目录结构及说明
2017/11/27 Javascript
详解Vue项目引入CreateJS的方法(亲测可用)
2019/05/30 Javascript
解决vue.js中settimeout遇到的问题(时间参数短效果不稳定)
2020/07/21 Javascript
Python列表append和+的区别浅析
2015/02/02 Python
为Python的Tornado框架配置使用Jinja2模板引擎的方法
2016/06/30 Python
使用numpy和PIL进行简单的图像处理方法
2018/07/02 Python
Python+OpenCV实现图像融合的原理及代码
2018/12/03 Python
python实现socket+threading处理多连接的方法
2019/07/23 Python
Django实现分页显示效果
2019/10/31 Python
pytorch sampler对数据进行采样的实现
2019/12/31 Python
澳洲女装时尚在线:Blue Bungalow
2018/05/05 全球购物
彪马荷兰官网:PUMA荷兰
2019/05/08 全球购物
优秀毕业大学生推荐信
2013/11/13 职场文书
保洁主管岗位职责
2013/11/20 职场文书
浙江文明网签名寄语
2014/01/18 职场文书
室内趣味活动方案
2014/08/24 职场文书
群众路线教育实践活动自我剖析思想汇报
2014/10/04 职场文书
2016年春节慰问信息
2015/03/25 职场文书
PostgreSQL 插入INSERT、删除DELETE、更新UPDATE、事务transaction
2022/04/12 PostgreSQL
python实现一个简单的贪吃蛇游戏附代码
2022/06/28 Python