vue改变对象或数组时的刷新机制的方法总结


Posted in Javascript onApril 24, 2019

Vue数据响应原理

官方的解释很清晰:

当你把一个普通的 JavaScript 对象传给 Vue 实例的 data 选项,Vue 将遍历此对象所有的属性,并使用 Object.defineProperty 把这些属性全部转为 getter/setter。Object.defineProperty 是ES5 中一个无法 shim 的特性,这也就是为什么 Vue 不支持 IE8 以及更低版本浏览器的原因。 用户看不到 getter/setter,但是在内部它们让 Vue 追踪依赖,在属性被访问和修改时通知变化。这里需要注意的问题是浏览器控制台在打印数据对象时 getter/setter 的格式化并不同,所以你可能需要安装 vue-devtools 来获取更加友好的检查接口。 每个组件实例都有相应的 watcher 实例对象,它会在组件渲染的过程中把属性记录为依赖,之后当依赖项的 setter 被调用时,会通知 watcher 重新计算,从而致使它关联的组件得以更新。 

总结:

1.数组更改值或者增加删除值,不会触发更新。
2.对象更改值可触发更新,增加或者删除属性不会触发更新。
3.对象数组:数组中的对象更改值会触发更新。

一、纯数组-------showArr:[true,true]

数组中元素直接赋值,---不触发刷新

this.showArr[0]=!this.showArr[0];

数组修改后整体赋值,---不触发刷新

var parr=this.showArr;
parr[0]=!parr[0];
this.showArr=parr;

数组重新复制出一份新的,修改后整体赋值,---可触发刷新

var parr=this.showArr.slice(0);
parr[0]=!parr[0];
this.showArr=parr;

用$set赋值,---可触发刷新

this.$set(this.showArr,0,!this.showArr[0])

二、纯对象-------showArr:{'showBool':true}

对象中元素直接赋值,---可触发刷新

this.showArr['showBool']=!this.showArr['showBool'];

对象修改后整体赋值,---可触发刷新

var parr=this.showArr;
parr['showBool']=!parr['showBool'];
this.showArr=parr;

用$set赋值,---可触发刷新

this.$set(this.showArr,'showBool',!this.showArr['showBool']);

三、 对象数组-------showArr:[{'showBool':true},{'showBool':true}]

数组中元素直接赋值,---可触发刷新

this.showArr[0]['showBool']=!this.showArr[0]['showBool'];

数组修改后整体赋值,---可触发刷新

var parr=this.showArr;
parr[0]['showBool']=!parr[0]['showBool'];
this.showArr=parr;

数组重新复制出一份新的,修改后整体赋值,---可触发刷新

var parr=this.showArr.slice(0);
parr[0]['showBool']=!parr[0]['showBool'];
this.showArr=parr;

用$set赋值,---可触发刷新

this.$set(this.showArr[0],'showBool',!this.showArr[0]['showBool']);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
经典的解除许多网站无法复制文字的绝招
Dec 31 Javascript
jquery操作复选框(checkbox)的12个小技巧总结
Feb 04 Javascript
javascript/jquery获取地址栏url参数的方法
Mar 05 Javascript
超级好用的jQuery圆角插件 Corner速成
Aug 31 Javascript
js实现带缓冲效果的仿QQ面板折叠菜单代码
Sep 06 Javascript
jquery删除table当前行的实例代码
Oct 07 Javascript
客户端(vue框架)与服务器(koa框架)通信及服务器跨域配置详解
Aug 26 Javascript
vue做网页开场视频的实例代码
Oct 20 Javascript
vux uploader 图片上传组件的安装使用方法
May 15 Javascript
Vue项目实现简单的权限控制管理功能
Jul 17 Javascript
vue设置全局访问接口API地址操作
Aug 14 Javascript
vue+elementui通用弹窗的实现(新增+编辑)
Jan 07 Vue.js
详解Vue源码中一些util函数
Apr 24 #Javascript
vue-cli3 DllPlugin 提取公用库的方法
Apr 24 #Javascript
VUE 实现复制内容到剪贴板的两种方法
Apr 24 #Javascript
详解一个小实例理解js原型和继承
Apr 24 #Javascript
微信小程序实现的一键复制功能示例
Apr 24 #Javascript
如何基于vue-cli3.0构建功能完善的移动端架子
Apr 24 #Javascript
解决vue 单文件组件中样式加载问题
Apr 24 #Javascript
You might like
destoon供应信息title调用出公司名称的方法
2014/08/22 PHP
java模拟PHP的pack和unpack类
2016/04/13 PHP
mysql查找删除重复数据并只保留一条实例详解
2016/09/24 PHP
CakePHP框架Model关联对象用法分析
2017/08/04 PHP
利用Homestead快速运行一个Laravel项目的方法详解
2017/11/14 PHP
php合并数组并保留键值的实现方法
2018/03/12 PHP
在chrome中window.onload事件的一些问题
2010/03/01 Javascript
锋利的jQuery 第三章章节总结的例子
2010/03/23 Javascript
js采用map取到id集合组并且实现点击一行选中一行
2013/12/16 Javascript
解决Jquery鼠标经过不停滑动的问题
2014/03/03 Javascript
javascript中hasOwnProperty() 方法使用指南
2015/03/09 Javascript
jQuery实现在textarea指定位置插入字符或表情的方法
2015/03/11 Javascript
JS的框架Polymer中的dom-if和is属性使用说明
2015/07/29 Javascript
js和jquery分别验证单选框、复选框、下拉框
2015/12/17 Javascript
基于jquery二维码生成插件qrcode
2017/01/07 Javascript
Bootstrap table简单使用总结
2017/02/15 Javascript
JS实现异步上传压缩图片
2017/04/22 Javascript
浅谈js基础数据类型和引用类型,深浅拷贝问题,以及内存分配问题
2017/09/02 Javascript
详解node.js中的npm和webpack配置方法
2018/01/21 Javascript
vue与原生app的对接交互的方法(混合开发)
2018/11/28 Javascript
python去除文件中空格、Tab及回车的方法
2016/04/12 Python
Python数据结构与算法之完全树与最小堆实例
2017/12/13 Python
使用python实现快速搭建简易的FTP服务器
2018/09/12 Python
在Python 的线程中运行协程的方法
2020/02/24 Python
利用OpenCV中对图像数据进行64F和8U转换的方式
2020/06/03 Python
利用Python实现学生信息管理系统的完整实例
2020/12/30 Python
爱淘宝:淘宝网购物分享平台
2017/04/28 全球购物
Under Armour西班牙官网:美国知名的高端功能性运动品牌
2018/12/12 全球购物
植村秀加拿大官网:Shu Uemura加拿大
2019/09/03 全球购物
shallow copy和deep copy的区别
2016/05/09 面试题
小学教师听课制度
2014/02/01 职场文书
超市仓管员岗位职责范本
2014/09/18 职场文书
党员观看《筑梦中国》心得体会
2016/01/18 职场文书
2016年社区“6.26”禁毒日宣传活动总结
2016/04/05 职场文书
初中生入团申请书范文(五篇)
2019/10/16 职场文书
Windows server 2012 配置Telnet以及用法详解
2022/04/28 Servers