解决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 相关文章推荐
div+css布局的图片连续滚动js实现代码
May 04 Javascript
图片img的src不变让浏览器重新加载实现方法
Mar 29 Javascript
jquery动态增加text元素以及删除文本内容实例代码
Jul 01 Javascript
详解JS正则replace的使用方法
Mar 06 Javascript
JavaScript 消息框效果【实现代码】
Apr 27 Javascript
jquery模拟多级复选框效果的简单实例
Jun 08 Javascript
javascript-解决mongoose数据查询的异步操作
Dec 22 Javascript
jQuery remove()过滤被删除的元素(推荐)
Jul 18 jQuery
使用async-validator编写Form组件的方法
Jan 10 Javascript
jQuery实现提交表单时不提交隐藏div中input的方法
Oct 08 jQuery
详细分析vue响应式原理
Jun 22 Javascript
vue相同路由跳转强制刷新该路由组件操作
Aug 05 Javascript
解决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
WIN98下Apache1.3.14+PHP4.0.4的安装
2006/10/09 PHP
php出现web系统多域名登录失败的解决方法
2014/09/30 PHP
PHP预定义变量9大超全局数组用法详解
2016/04/23 PHP
PHP+Ajax异步带进度条上传文件实例
2016/11/01 PHP
多个Laravel项目如何共用migrations详解
2018/09/25 PHP
基于jQuery的输入框在光标位置插入内容, 并选中
2011/10/29 Javascript
如何使用json在前后台进行数据传输实例介绍
2013/04/11 Javascript
jquery获取选中的文本和值的方法
2014/07/08 Javascript
JavaScript中的数学运算介绍
2014/12/29 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 图片库
2015/01/09 Javascript
简介AngularJS的视图功能应用
2015/06/17 Javascript
js实现图片放大和拖拽特效代码分享
2015/09/05 Javascript
js实现的动画导航菜单效果代码
2015/09/10 Javascript
JS实现的最简Table选项卡效果
2015/10/14 Javascript
快速掌握Node.js之Window下配置NodeJs环境
2016/03/21 NodeJs
JS判断是否在微信浏览器打开的简单实例(推荐)
2016/08/24 Javascript
AngularJS 文件上传控件 ng-file-upload详解
2017/01/13 Javascript
三种方式实现瀑布流布局
2017/02/10 Javascript
vue监听scroll的坑的解决方法
2017/09/07 Javascript
vue 音乐App QQ音乐搜索列表最新接口跨域设置方法
2018/09/25 Javascript
js拖动滑块和点击水波纹效果实例代码
2018/10/16 Javascript
javascript中call()、apply()的区别
2019/03/21 Javascript
Vue $mount实战之实现消息弹窗组件
2019/04/22 Javascript
JS开发自己的类库实例分析
2019/08/28 Javascript
nodeJs的安装与npm全局环境变量的配置详解
2020/01/06 NodeJs
在vue中实现echarts随窗体变化
2020/07/27 Javascript
[46:20]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS BO3 第二场 1月22日
2021/03/11 DOTA
python中lambda函数 list comprehension 和 zip函数使用指南
2014/09/28 Python
Python基于smtplib实现异步发送邮件服务
2015/05/28 Python
Ubuntu下Python+Flask分分钟搭建自己的服务器教程
2019/11/19 Python
Windows系统下pycharm中的pip换源
2020/02/23 Python
python实现ssh及sftp功能(实例代码)
2020/03/16 Python
HTML5 Web Database 数据库的SQL语句的使用方法
2012/12/09 HTML / CSS
亚历山大·王官网:Alexander Wang
2017/06/23 全球购物
几道PHP的面试题
2012/05/19 面试题
如何设置Java的运行环境
2013/04/05 面试题