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 相关文章推荐
CheckBox 如何实现全选?
Jun 23 Javascript
实现超用户体验 table排序javascript实现代码
Jun 22 Javascript
jquery ajax属性async(同步异步)示例
Nov 05 Javascript
Javascript验证Visa和MasterCard信用卡号的方法
Jul 27 Javascript
基于javascript实现彩票随机数生成(升级版)
Apr 17 Javascript
jQuery实现的网格线绘制方法
Jun 20 Javascript
js判断数组key是否存在(不用循环)的简单实例
Aug 03 Javascript
vue-router项目实战总结篇
Feb 11 Javascript
React props和state属性的具体使用方法
Apr 12 Javascript
JavaScript 点击触发复制功能实例详解
Nov 02 Javascript
公众号SVG动画交互实战代码
May 31 Javascript
使用Canvas绘制一个游戏人物属性图
Mar 25 Javascript
详解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
THINKPHP2.0到3.0有哪些改进之处
2015/01/04 PHP
laravel创建类似ThinPHP中functions.php的全局函数
2016/11/26 PHP
PHP实现的最大正向匹配算法示例
2017/12/19 PHP
php如何比较两个浮点数是否相等详解
2019/02/12 PHP
Codeigniter里的无刷新上传的实现代码
2019/04/14 PHP
php常用字符串查找函数strstr()与strpos()实例分析
2019/06/21 PHP
通过PHP实现获取访问用户IP
2020/05/09 PHP
深入理解JavaScript系列(6):S.O.L.I.D五大原则之单一职责SRP
2012/01/15 Javascript
jquery属性过滤选择器使用示例
2013/06/18 Javascript
浏览器窗口大小变化时使用resize事件对框架不起作用的解决方法
2014/05/11 Javascript
js检测用户输入密码强度
2015/10/22 Javascript
Bootstrap基本插件学习笔记之模态对话框(16)
2016/12/08 Javascript
根据Bootstrap Paginator改写的js分页插件
2016/12/25 Javascript
js获取ip和地区
2017/03/10 Javascript
详解vue过滤器在v2.0版本用法
2017/06/01 Javascript
Easyui使用Dialog行内按钮布局的实例
2017/07/27 Javascript
浅谈关于angularJs中使用$.ajax的注意点
2017/08/12 Javascript
label+input实现按钮开关切换效果的实例
2017/08/16 Javascript
微信小程序实现页面跳转传值的方法
2017/10/12 Javascript
webpack多页面开发实践
2017/12/18 Javascript
jquery 实现拖动文件上传加载进度条功能
2018/03/18 jQuery
Javascript作用域和作用域链原理解析
2020/03/03 Javascript
原生JavaScript实现进度条
2021/02/19 Javascript
[01:28]2014DOTA2国际邀请赛中国区预选赛四大豪门直升机抵达会场
2014/05/24 DOTA
Python常用内置函数总结
2015/02/08 Python
python将ip地址转换成整数的方法
2015/03/17 Python
Python中设置变量访问权限的方法
2015/04/27 Python
Python实现针对含中文字符串的截取功能示例
2017/09/22 Python
Python自定义函数计算给定日期是该年第几天的方法示例
2019/05/30 Python
Python Web程序搭建简单的Web服务器
2019/07/31 Python
python实现与redis交互操作详解
2020/04/21 Python
娇韵诗加拿大官网:Clarins加拿大
2017/11/20 全球购物
捐献物资倡议书范文
2014/05/19 职场文书
单身申明具结书
2015/02/26 职场文书
校车司机安全责任书
2015/05/11 职场文书
postman中form-data、x-www-form-urlencoded、raw、binary的区别介绍
2022/01/18 HTML / CSS