微信小程序使用setData修改数组中单个对象的方法分析


Posted in Javascript onDecember 30, 2018

本文实例讲述了微信小程序使用setData修改数组中单个对象的方法。分享给大家供大家参考,具体如下:

微信小程序已经出来挺久的时间了,之前只是在文档上粗略的看了一下,最近稍得空闲,便利用微信小程序平台写一个练手的项目,顺便学习一下小程序开发,感觉大体跟前端开发基本类似,但是因为是在微信的平台上运行,具体还是要根据小程序的规则来编写代码的,其中还是有部分的内容跟前端中常见的有所不同,于是接下来的博客里,也会顺手记录微信小程序开发过程中的一些坑,帮助后来的小程序开发者少踩一些坑,当然我踩的坑大部分都是以前的开发者踩过的,我所做的也仅仅是记录,分享。

习惯使用Vue或者React这类框架的开发者们,肯定不会对修改data内中数组的单个对象而烦恼,因为这些框架已经帮我们很好的处理了这个问题,并且在文档上也写的非常清楚。

比如要求是有一个数组存放了购物车的商品信息,而你在购物车内修改了单个商品的期望购买数量后,我们就要动态的更新这个单个对象的购买数量值,如果在小程序里我们会怎么做呢?

如果你按照Vue的写法来实现的话,不出意外会失败。而微信小程序也只给我们提供了一个setData方法,这个方法是使用键值对的形式对数据进行修改,例如:

this.setData({
  name : 'leon'
})

回到我们刚刚的例子里,这时候,如果你想修改单个商品的数量信息,应该怎么写?

首先展示一种错误的写法:

Page({
 data: {
  array: [{text: 'init data'}],
 },
 changeItemInArray: function (index) {
 this.setData({
 'array['+index+'].text':'changed data'
 })
 }
})

如果这样动态的写index,很显然,这样是无法使用在对象的key中的,我相信小程序的新手开发者可能尝试过这样的写法。

那么正确的写法究竟是怎么样的呢?

changeItemInArray: function (index) {
 // 提前准备好对象
 var item = this.data.list[index]
 item.count = 100
 // 依旧是根据index获取数组中的对象
 var key = "list["+ index + "]"
 this.setData({
 // 这里使用键值对方式赋值
  key: item 
 }, function () {})
}

最后,希望以后的小程序版本更新中,有更好的赋值方法。希望这篇文章能帮助到小程序的新手开发者。

希望本文所述对大家微信小程序开发有所帮助。

Javascript 相关文章推荐
你的编程语言可以这样做吗?
Sep 07 Javascript
javascript 判断中文字符长度的函数代码
Aug 27 Javascript
jQuery制作拼图小游戏
Jan 12 Javascript
纯JS实现旋转图片3D展示效果
Apr 12 Javascript
javascript实现网页子页面遍历回调的方法(涉及 window.frames、递归函数、函数上下文)
Jul 27 Javascript
原生js实现放大镜
Feb 20 Javascript
vue脚手架vue-cli的学习使用教程
Jun 06 Javascript
详解微信小程序中的页面代码中的模板的封装
Oct 12 Javascript
深入解析koa之异步回调处理
Jun 17 Javascript
layui form表单提交后实现自动刷新
Oct 25 Javascript
如何在vue项目中嵌入jsp页面的方法(2种)
Feb 06 Javascript
关于vue-router-link选择样式设置
Apr 30 Vue.js
微信小程序提交form操作示例
Dec 30 #Javascript
bootstrap下拉分页样式 带跳转页码
Dec 29 #Javascript
详解vue 兼容IE报错解决方案
Dec 29 #Javascript
玩转Koa之koa-router原理解析
Dec 29 #Javascript
Bootstrap Paginator+PageHelper实现分页效果
Dec 29 #Javascript
玩转Koa之核心原理分析
Dec 29 #Javascript
如何从0开始用node写一个自己的命令行程序
Dec 29 #Javascript
You might like
PHP实现把数字ID转字母ID
2013/08/12 PHP
php将textarea数据提交到mysql出现很多空格的解决方法
2014/12/19 PHP
Yii框架在页面输出执行sql语句以方便调试的实现方法
2014/12/24 PHP
php支付宝手机网页支付类实例
2015/03/04 PHP
浅谈PHP中try{}catch{}的使用方法
2016/12/09 PHP
javascript脚本调试方法小结
2008/11/24 Javascript
js弹出层包含flash 不能关闭隐藏的2种处理方法
2013/06/17 Javascript
解析页面加载与js函数的执行 onload or ready
2013/12/12 Javascript
JavaScript在IE和FF下的兼容性问题
2014/05/19 Javascript
node.js中的buffer.write方法使用说明
2014/12/10 Javascript
JavaScript_ECMA5数组新特性详解
2016/06/12 Javascript
原生js编写焦点图效果
2016/12/08 Javascript
AngularJS页面传参的5种方式
2017/04/01 Javascript
jQuery插件FusionCharts绘制2D双折线图效果示例【附demo源码】
2017/04/14 jQuery
使用use注册Vue全局组件和全局指令的方法
2018/03/08 Javascript
解决Vue+Element ui开发中碰到的IE问题
2018/09/03 Javascript
NodeJs 文件系统操作模块fs使用方法详解
2018/11/26 NodeJs
layui中select,radio设置不生效的解决方法
2019/09/05 Javascript
JS数组降维的实现Array.prototype.concat.apply([], arr)
2020/04/28 Javascript
js+canvas实现刮刮奖功能
2020/09/13 Javascript
[46:21]Liquid vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
Python字符串中查找子串小技巧
2015/04/10 Python
批量获取及验证HTTP代理的Python脚本
2017/04/23 Python
Python hashlib加密模块常用方法解析
2019/12/18 Python
python statsmodel的使用
2020/12/21 Python
使用canvas绘制贝塞尔曲线
2014/12/17 HTML / CSS
HTML5拖拽的简单实例
2016/05/30 HTML / CSS
Delphi工程师笔试题
2013/09/21 面试题
法学专业自我鉴定
2014/02/05 职场文书
项目合作意向书范本
2014/04/01 职场文书
大二学习计划书范文
2014/04/27 职场文书
农民工工资支付承诺书
2015/05/04 职场文书
全国劳模先进事迹材料(2016精选版)
2016/02/25 职场文书
如何书写民事调解协议书?
2019/06/25 职场文书
深入浅出的讲解:信号调制到底是如何实现的
2022/02/18 无线电
SpringBoot使用AOP实现统计全局接口访问次数详解
2022/06/16 Java/Android