数据更新了但视图没有更新,常见的有两种情况:数组、对象

数组更新检测

数组有一些方法可以导致视图更新

  1. push()
  2. pop()
  3. shift()
  4. unshift()
  5. splice()
  6. sort()
  7. reverse()

    替换数组: 例如:filter(), concat() 和 slice() 。这些不会改变原始数组,但总是返回一个新数组。可以用新数组替换旧数组,你可能认为这将导致 Vue 丢弃现有 DOM 并重新渲染整个列表。幸运的是,事实并非如此。Vue 为了使得 DOM 元素得到最大范围的重用而实现了一些智能的、启发式的方法,所以用一个含有相同元素的数组去替换原来的数组是非常高效的操作。

注意事项

由于 JavaScript 的限制,Vue 不能检测以下变动的数组:

  1. 当你利用索引直接设置一个项时,例如:vm.items[indexOfItem] = newValue
  2. 当你修改数组的长度时,例如:vm.items.length = newLength
var vm = new Vue({data: {items: ['a', 'b', 'c']}
})
vm.items[1] = 'x' // 不是响应性的
vm.items.length = 2 // 不是响应性的

为了解决第一类问题,以下两种方式都可以实现和 vm.items[indexOfItem] = newValue 相同的效果,同时也将触发状态更新:

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

你也可以使用 vm.$set 实例方法,该方法是全局方法 Vue.set 的一个别名:

vm.$set(vm.items, indexOfItem, newValue)

为了解决第二类问题,你可以使用 splice:

vm.items.splice(newLength)

对象更改检测注意事项

还是由于 JavaScript 的限制,Vue 不能检测对象属性的添加或删除:

var vm = new Vue({data: {a: 1}
})
// `vm.a` 现在是响应式的vm.b = 2
// `vm.b` 不是响应式的

对于已经创建的实例,Vue 不能动态添加根级别的响应式属性。但是,可以使用 Vue.set(object, key, value) 方法向嵌套对象添加响应式属性。例如,对于:

var vm = new Vue({data: {userProfile: {name: 'Anika'}}
})

你可以添加一个新的 age 属性到嵌套的 userProfile 对象:

Vue.set(vm.userProfile, 'age', 27)

你还可以使用 vm.$set 实例方法,它只是全局 Vue.set 的别名:

vm.$set(vm.userProfile, 'age', 27)

有时你可能需要为已有对象赋予多个新属性,比如使用 Object.assign() 或 _.extend()。在这种情况下,你应该用两个对象的属性创建一个新的对象。所以,如果你想添加新的响应式属性,不要像这样:

Object.assign(vm.userProfile, {age: 27,favoriteColor: 'Vue Green'
})

你应该这样做:

vm.userProfile = Object.assign({}, vm.userProfile, {age: 27,favoriteColor: 'Vue Green'
})

vue更改了数据但是视图却没有更新相关推荐

  1. Vue data 中随意更改一个属性,视图都会被更新吗?

    以下内容来自公众号逆锋起笔,关注每日干货及时送达 作者:Rudy24 链接:https://juejin.cn/post/7040733315791323143 面试官:看过 Vue 的源码没? 候选 ...

  2. 「后端小伙伴来学前端了」Vue中 this.$set的用法 | 可用于修改对象中数组的某一个对象、 可用于更新数据到视图

    夜晚有明月,梦里有佳人 前言 最近在写老师布置的vue项目,真的说实话,每天真就是在百度.google.bing等各个搜索引擎之间反复横跳,不然就是掘金搜一搜.思否搜一搜,还有CSDN看一看.我的前端 ...

  3. vue 不能响应set结构增加数据_Vue.set()动态的新增与修改数据,触发视图更新的方法...

    参数: target:要更改的数据源(可以是对象或者数组) key:要更改的具体数据(可以是字符串和数字) value :重新赋的值 用法:向响应式对象中添加一个属性,并确保这个新属性同样是响应式的, ...

  4. vue数组中数据变化但是视图没有更新解决方案

    vue数组中数据变化但是视图没有更新解决方案 参考文章: (1)vue数组中数据变化但是视图没有更新解决方案 (2)https://www.cnblogs.com/sufubo/p/6906261.h ...

  5. vue项目中使用Echarts 动态更改图表数据 , Vue 折线图、柱状图等图表动态刷新 ,

    问题:在vue组件中,用echarts插件 动态获取.修改图表数据 解决:已解决! 第一步:打开cmd命令窗口 安装echarts依赖 安装:npm install echarts -S 第二步:在m ...

  6. Vue.set()实现数据动态响应

    2019独角兽企业重金招聘Python工程师标准>>> this.$set()和Vue.set()本质方法一样,前者可以用在methods中使用. 在vue里面,我们操作最多的就是各 ...

  7. Django Vue渲染动态数据(七)

    (一)批量添加数据 import random from django.http import HttpResponse def add_goods(request):## 添加店铺store = S ...

  8. Vue 对象和数据的强制更新方式

    对象和数据的强制更新 数组更新 以下支持自动更新 push() //向后添加     pop() //删除最后一个     shift() //删除第一个     unshift() //向第一个添加 ...

  9. 一篇文章教会你创建vue项目和使用vue.js实现数据增删改查

    简介:一篇文章教会你创建vue项目和使用vue.js实现数据增删改查 [一.项目背景] 在管理员的一些后台页面里,数据列表中都会对这些数据进行增删改查的操作,例如管理员添加商品.修改商品价格.删除商品 ...

  10. vue 修改对象的值视图没有发生改变_在vue中处理对象属性改变视图不更新问题? - echart...

    ...图等等,但是这些代码比较难写,因此我们通常会用借助echarts,那你知道如何使用echarts吗?这篇文章就和大家讲讲echarts的使用方法,有一定的参考价值,感兴趣的朋友可以看看.以饼状图 ...

最新文章

  1. Hash算法解决冲突的四种方法
  2. 远程桌面连接管理问题解决方法大全
  3. 高盛发布区块链报告:从理论到实践(中文版)
  4. Python多线程之构建线程池
  5. leetcode中使用c++需要注意的点以及各类容器的初始化、常用成员函数
  6. 2021中国家居行业洞察白皮书
  7. 禅道报表中关闭bug统计图_想要简单制作数据可视化分析报表?这个工具绝对好用...
  8. HTML (3)---HTML编辑器
  9. 枚举算法:试统计正整数n的阶层n!=1*2*...*n尾部连续零的个数。
  10. Winform导入文件
  11. Flex 弹性布局(****************************************************)
  12. 企业级 SpringBoot 教程 (十三)springboot集成spring cache
  13. XINS 3.1.0 Alpha2 发布,远程 API 调用规范
  14. 综合应用WPF/WCF/WF/LINQ之二十九:代码生成器之DBMLToCode
  15. 2021 年 五一数学建模比赛 C 题
  16. 学术论文海报模板_论文深耕 | 第一次写学术论文无从下手?阅读写作套路来了!...
  17. Spring Cloud微服务:Loadbalancer 实战
  18. Windows网络共享或共享打印机无法访问连接的简单终极解决方法
  19. Unity学习第二周
  20. mit计算机科学中心,MIT苏珊•霍克菲尔德校长在清华大学-麻省理工学院-香港中文大学“理论计算机科学研究中心”揭牌典礼上的致辞...

热门文章

  1. python大鱼吃小鱼
  2. 天行健,君子以自强不息;地势坤,群子以厚德载物。
  3. win10 1607 密匙
  4. rails erb_您需要知道Rails中的erb以及如何掌握它
  5. Description Resource Path Location Type Cannot change version of project fac(导入maven项目出现红叉问题)...
  6. 51单片机、STM32中生成QRCode二维码
  7. python爬虫之scrapy
  8. ASAN中无崩溃测试方案实现
  9. php函数大小写转化,php大小写转换函数(strtolower、strtoupper)用法介绍
  10. 如何下载安装chrome扩展程序