在vue中对数组值变化的监听与重新响应渲染操作


Posted in Javascript onJuly 17, 2020

在我们项目开发过程中,实例中的数据类型可以是对象、数组等。在对象中,某个属性值发生更改时,我们可以通过对象的深度监听,以达到重新渲染页面的需求。或者查阅这篇文章

例如:

<script>
 export default {
 data(){
 return {
 objVal: {
  name: 'obj',
  type: 'obj'
 }
 }
 },
 watch:{
 objVal:{
 handler(val,oldval){
 
 },
 deep: true,
 }
 },
 methods:{
 changeObj(){
 this.objVal.name = 'newobj';
 }
 }
 }
</script>

但是,在使用同一种方式进行数组值更改监听时,这种做法是无效的。

<script>
export default {
 data() {
 return {
 arrList: [1,2,3,4,5]
 };
 },
 watch: {
 arrList: {
 handler(val, oldval) {
 
 },
 deep: true
 }
 },
 methods: {
 changeArr() {
 // 无效
 this.arrList[0] = 10;
 }
 }
};
</script>

上述用以监听数组值变化的方法是无效的,vue是不会响应数据变化而重新去渲染页面。在vue中仅需要通过修改赋值语句的方式,即可让vue响应数组数据的变化。具体操作如下:

使用方法:

// Vue.set
Vue.set(vm.items, indexOfItem, newValue)
// Array.prototype.splice
vm.items.splice(indexOfItem, 1, newValue)

具体使用案例:

<script>
export default {
 data() {
 return {
 arrList: [1,2,3,4,5]
 };
 },
 methods: {
 changeArr() {
 // this.arrList[0] = 10;
 // 修改为:
 this.arrList.splice(0, 1, 10);
 }
 }
};
</script>

或:

<script>
export default {
 data() {
 return {
 arrList: [1,2,3,4,5]
 };
 },
 methods: {
 changeArr() {
 // this.arrList[0] = 10;
 // 修改为:
 this.$set(this.arrList, 0, 10);
 }
 }
};
</script>

以上两种方式,均可达到监听数组值变化的效果。

补充知识:vue数组操作不触发前端重新渲染

暂时使用给数组先赋值 [ ] ,然后重新赋值的方式解决。

此外,能够监听的数组变异方法

https://cn.vuejs.org/v2/guide/list.html#%E5%8F%98%E5%BC%82%E6%96%B9%E6%B3%95

还有就是set

Javascript 相关文章推荐
javascript hashtable 修正版 下载
Dec 30 Javascript
jQuery当鼠标悬停时放大图片的效果实例
Jul 03 Javascript
jquery图片不完全按比例自动缩小的简单代码
Jul 29 Javascript
手机号码,密码正则验证
Sep 04 Javascript
javascript笛卡尔积算法实现方法
Apr 08 Javascript
理解javascript定时器中的setTimeout与setInterval
Feb 23 Javascript
总结Node.js中的一些错误类型
Aug 15 Javascript
jQuery事件对象总结
Oct 17 Javascript
清除浏览器缓存的几种方法总结(必看)
Dec 09 Javascript
JS实现json的序列化和反序列化功能示例
Jun 13 Javascript
浅谈v-for 和 v-if 并用时筛选条件方法
Nov 07 Javascript
vue实现按钮切换图片
Jan 20 Vue.js
Vue项目中数据的深度监听或对象属性的监听实例
Jul 17 #Javascript
解决vue无法侦听数组及对象属性的变化问题
Jul 17 #Javascript
使用element-ui +Vue 解决 table 里包含表单验证的问题
Jul 17 #Javascript
Vue element-ui父组件控制子组件的表单校验操作
Jul 17 #Javascript
简单了解常用的JavaScript 库
Jul 16 #Javascript
jQuery加PHP实现图片上传并提交的示例代码
Jul 16 #jQuery
浅谈js中的attributes和Attribute的用法与区别
Jul 16 #Javascript
You might like
PHP Directory 函数的详解
2013/03/07 PHP
PHP中file_exists()判断中文文件名无效的解决方法
2014/11/12 PHP
PHP 开发者该知道的 5 个 Composer 小技巧
2016/02/03 PHP
豆瓣网的jquery代码实例
2008/06/15 Javascript
JS模拟面向对象全解(一、类型及传递)
2011/07/13 Javascript
JS操作iframe里的dom(实例讲解)
2014/01/29 Javascript
调试代码导致IE出错的避免方法
2014/04/04 Javascript
js获取鼠标点击的对象,点击另一个按钮删除该对象的实现代码
2016/05/13 Javascript
JS中关于事件处理函数名后面是否带括号的问题
2016/11/16 Javascript
浅谈js中几种实用的跨域方法原理详解
2016/12/02 Javascript
js实现下拉菜单效果
2017/03/01 Javascript
移动端手指放大缩小插件与js源码
2017/05/22 Javascript
vue实现点击当前标签高亮效果【推荐】
2018/06/22 Javascript
vue3为什么要用proxy替代defineProperty
2020/10/19 Javascript
使用python提取html文件中的特定数据的实现代码
2013/03/24 Python
如何运行Python程序的方法
2013/04/21 Python
Python greenlet实现原理和使用示例
2014/09/24 Python
Python的Scrapy爬虫框架简单学习笔记
2016/01/20 Python
深入理解python对json的操作总结
2017/01/05 Python
python DataFrame 修改列的顺序实例
2018/04/10 Python
对Python 文件夹遍历和文件查找的实例讲解
2018/04/26 Python
Kmeans均值聚类算法原理以及Python如何实现
2020/09/26 Python
实例教程 一款纯css3实现的数字统计游戏
2014/11/10 HTML / CSS
用HTML5 Canvas API中的clearRect()方法实现橡皮擦功能
2016/03/15 HTML / CSS
意大利咖啡、浓缩咖啡和浓缩咖啡机:illy caffe
2019/03/20 全球购物
北京银河万佳Java面试题
2012/03/21 面试题
个人简历中的自我评价怎么写
2014/01/26 职场文书
市场策划求职信
2014/08/07 职场文书
部门活动策划方案
2014/08/16 职场文书
教师民族团结演讲稿
2014/08/27 职场文书
2014党员四风对照检查材料思想汇报
2014/09/17 职场文书
英语感谢信范文
2015/01/20 职场文书
红与黑读书笔记
2015/06/29 职场文书
python某漫画app逆向
2021/03/31 Python
FP-growth算法发现频繁项集——构建FP树
2021/06/24 Python
如何通过一篇文章了解Python中的生成器
2022/04/02 Python