微信小程序中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 相关文章推荐
在JavaScript并非所有的一切都是对象
Apr 11 Javascript
js中的如何定位固定层的位置
Jun 15 Javascript
node.js中的fs.lchmodSync方法使用说明
Dec 16 Javascript
jquery动态改变div宽度和高度
Feb 09 Javascript
整理JavaScript创建对象的八种方法
Nov 03 Javascript
Vue.js使用$.ajax和vue-resource实现OAuth的注册、登录、注销和API调用
May 10 Javascript
JS按条件 serialize() 对应标签的使用方法
Jul 24 Javascript
webpack4+Vue搭建自己的Vue-cli项目过程分享
Aug 29 Javascript
微信开发之微信jssdk录音功能开发示例
Oct 22 Javascript
jquery层次选择器的介绍
Jan 18 jQuery
JavaScript ES6常用基础知识总结
Feb 09 Javascript
vue图片上传组件使用详解
Dec 23 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 5.3新特性命名空间规则解析及高级功能
2010/03/11 PHP
php 无法载入mysql扩展
2010/03/12 PHP
php实现的农历算法实例
2015/08/11 PHP
jQuery TextBox自动完成条
2009/07/22 Javascript
jQuery $.each的用法说明
2010/03/22 Javascript
node.js Web应用框架Express入门指南
2014/05/28 Javascript
javascript中解析四则运算表达式的算法和示例
2014/08/11 Javascript
jQuery中slideUp 和 slideDown 的点击事件
2015/02/26 Javascript
微信企业号开发之微信考勤Cookies的使用
2015/09/11 Javascript
jQuery基于排序功能实现上移、下移的方法
2016/11/26 Javascript
jQuery实现的动态文字变化输出效果示例【附演示与demo源码下载】
2017/03/24 jQuery
详解ElementUI之表单验证、数据绑定、路由跳转
2017/06/21 Javascript
JS实现页面打印(整体、局部)
2017/08/18 Javascript
js解决软键盘遮挡输入框的问题分享
2017/12/19 Javascript
Vue服务器渲染Nuxt学习笔记
2018/01/31 Javascript
React路由管理之React Router总结
2018/05/10 Javascript
JavaScript设计模式之装饰者模式定义与应用示例
2018/07/25 Javascript
Vue.js 通过jQuery ajax获取数据实现更新后重新渲染页面的方法
2018/08/09 jQuery
Vue $emit()不能触发父组件方法的原因及解决
2020/07/28 Javascript
通过Python 接口使用OpenCV的方法
2018/04/02 Python
Python实现读取字符串按列分配后按行输出示例
2018/04/17 Python
一百多行python代码实现抢票助手
2018/09/25 Python
Python实现滑动平均(Moving Average)的例子
2019/08/24 Python
python实现低通滤波器代码
2020/02/26 Python
浅谈cv2.imread()和keras.preprocessing中的image.load_img()区别
2020/06/12 Python
解决keras使用cov1D函数的输入问题
2020/06/29 Python
html5手机键盘弹出收起的处理
2020/01/20 HTML / CSS
德国汽车零件和汽车配件网上商店:kfzteile24
2018/11/14 全球购物
Farfetch中文官网:奢侈品牌时尚购物平台
2020/03/15 全球购物
幼儿园长自我鉴定
2013/10/17 职场文书
《三峡》教学反思
2014/03/01 职场文书
行政助理工作职责范本
2014/03/04 职场文书
文案策划岗位职责
2015/02/11 职场文书
学生会个人总结范文
2015/02/15 职场文书
Vue图片裁剪组件实例代码
2021/07/02 Vue.js
为什么MySQL 删除表数据 磁盘空间还一直被占用
2021/10/16 MySQL