解决vue中修改了数据但视图无法更新的情况


Posted in Javascript onAugust 27, 2018

我们有时候常碰到vue中明明修改了数据,但是视图无法更新,因此我总结了一点点碰到此类的情况:

1、v-for遍历的数组,当数组内容使用的是arr[0].xx =xx更改数据,vue无法监测到

数组数据变动:我们使用某些方法操作数组,变动数据时,有些方法无法被vue监测,有些可以

Vue包装了数个数组操作函数,使用这些方法操作的数组去,其数据变动时会被vue监测:

push()

pop()

shift()

unshift()

splice()

sort()

reverse()

vue2.0还增加个方法可以观测Vue.set(items, indexOfItem, newValue)

filter(), concat(), slice() 。这些不会改变原始数组,但总是返回一个新数组。当使用非变异方法时,可以用新数组替换旧数组

Vue 不能检测以下变动的数组:

① 当你利用索引直接设置一个项时,vm.items[indexOfItem] = newValue

② 当你修改数组的长度时,例如: vm.items.length = newLength

话不多说,上代码,并且附上效果图:

<body>
  <div id="app">
   <ul>
    <li v-for="(item,index) in gc">
     <span>{{item.name}}-{{index}}</span>
     <span>{{item.age}}-{{index}}</span>
    </li>
   </ul>
   <button @click="add">click</button>
  </div>
  <script>
  new Vue({
   el:'#app',
   data:{
    gc:[
     {name:'zhangsan',age:10},
     {name:'lisi',age:21},
     {name:'wangwu',age:22},
     {name:'wangwu',age:22}
    ]
   },methods:{
    // 当点击事件触发时候会修改掉gc[0]的值为lisi,但是视图不会发生变化
    add(){
     this.gc[0] ={name:'lisi',age:22} 
    }
   }
  })
  </script> 
</body>

解决vue中修改了数据但视图无法更新的情况

解决vue中修改了数据但视图无法更新的情况

以上Vue 不能检测数据变动的数组的2种方式解决办法

将代码中的add()方法改为:

add(){
  // this.gc[0] ={name:'lisi',age:22} //这样直接修改不能被vue监听到
  Vue.set(this.gc,0,{name:'lisi',age:22}) //这样就能被vue监控到,更新视图    
 }

解决vue中修改了数据但视图无法更新的情况

以上这篇解决vue中修改了数据但视图无法更新的情况就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
一个js封装的不错的选项卡效果代码
Feb 15 Javascript
用Jquery实现多级下拉框无刷新的联动
Dec 22 Javascript
javascript中的取反再取反~~没有意义
Apr 06 Javascript
jQuery控制DIV层实现由大到小,由远及近动画变化效果
Oct 09 Javascript
js 连续赋值的简单实现
Jun 13 Javascript
js案例之鼠标跟随jquery版(实例讲解)
Jul 21 jQuery
详解jenkins自动化部署vue
May 14 Javascript
Vue中的transition封装组件的实现方法
Aug 13 Javascript
vue - vue.config.js中devServer配置方式
Oct 30 Javascript
Ant Design Vue 添加区分中英文的长度校验功能
Jan 21 Javascript
elementui实现预览图片组件二次封装
Dec 29 Javascript
详解Vue的options
May 15 Vue.js
解决vue接口数据赋值给data没有反应的问题
Aug 27 #Javascript
vue 修改 data 数据问题并实时显示的方法
Aug 27 #Javascript
Node.js连接Sql Server 2008及数据层封装详解
Aug 27 #Javascript
解决vue中修改export default中脚本报一大堆错的问题
Aug 27 #Javascript
vue.js 图片上传并预览及图片更换功能的实现代码
Aug 27 #Javascript
JS常见构造模式实例对比分析
Aug 27 #Javascript
Vue.js图片预览插件使用详解
Aug 27 #Javascript
You might like
PHP对象、模式与实践之高级特性分析
2016/12/08 PHP
ThinkPHP实现图片上传操作的方法详解
2017/05/08 PHP
TP5框架页面跳转样式操作示例
2020/04/05 PHP
getElementById在任意一款浏览器中都可以用吗的疑问回复
2007/05/13 Javascript
JavaScript中的函数的两种定义方式和函数变量赋值
2014/05/12 Javascript
javascript包装对象实例分析
2015/03/27 Javascript
javascript的replace方法结合正则使用实例总结
2016/06/16 Javascript
js 动态给元素添加、移除事件的实现方法
2016/07/19 Javascript
JavaScript获取URL中参数querystring的方法详解
2016/10/11 Javascript
javascript 闭包详解及简单实例应用
2016/12/31 Javascript
Bootstrap模态框插件使用详解
2017/05/11 Javascript
Javascript实现从小到大的数组转换成二叉搜索树
2017/06/13 Javascript
微信小程序websocket实现聊天功能
2020/03/30 Javascript
[01:31]DOTA2上海特级锦标赛 SECRET战队完整宣传片
2016/03/16 DOTA
[49:31]TFT vs Mski Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
详解Django框架中用context来解析模板的方法
2015/07/20 Python
Python列出一个文件夹及其子目录的所有文件
2016/06/30 Python
深入理解NumPy简明教程---数组3(组合)
2016/12/17 Python
Python 递归函数详解及实例
2016/12/27 Python
Python中django学习心得
2017/12/06 Python
Python实现的文本对比报告生成工具示例
2018/05/22 Python
pandas dataframe的合并实现(append, merge, concat)
2019/06/24 Python
详解css3 object-fit属性
2018/07/27 HTML / CSS
初探CSS3中的calc()功能
2015/07/14 HTML / CSS
美国酒店控股公司:Choice Hotels
2018/06/15 全球购物
Omio葡萄牙:全欧洲低价大巴、火车和航班搜索和比价
2019/02/09 全球购物
String和StringBuffer的区别
2015/08/13 面试题
下面关于"联合"的题目的输出是什么
2013/08/06 面试题
如果有两个类A,B,怎么样才能使A在发生一个事件的时候通知B
2016/03/12 面试题
服装厂厂长职责
2013/12/16 职场文书
党的群众教育实践活动实施方案
2014/06/12 职场文书
机电系毕业生求职信
2014/07/11 职场文书
企业总经理助理岗位职责
2014/09/12 职场文书
工作迟到检讨书范文
2015/05/06 职场文书
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
2021/05/31 Python
DE1103使用报告
2022/04/05 无线电