解决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 相关文章推荐
看了就知道什么是JSON
Dec 09 Javascript
提高网站性能之 如何对待JavaScript
Oct 31 Javascript
JavaScript 高级篇之闭包、模拟类,继承(五)
Apr 07 Javascript
ExtJS如何设置与获取radio控件的选取状态
Jan 22 Javascript
基于jQuery实现的QQ表情插件
Aug 25 Javascript
window.open不被拦截的简单实现代码(推荐)
Aug 04 Javascript
基于AngularJS实现iOS8自带的计算器
Sep 12 Javascript
JavaScript之WebSocket技术详解
Nov 18 Javascript
javascript自定义事件功能与用法实例分析
Nov 08 Javascript
JavaScript设计模式之装饰者模式定义与应用示例
Jul 25 Javascript
JS+HTML5本地存储Localstorage实现注册登录及验证功能示例
Feb 10 Javascript
记录一次websocket封装的过程
Nov 23 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
PHP中文件上传的一个问题
2010/09/04 PHP
php使用curl并发减少后端访问时间的方法分析
2016/05/12 PHP
PHP正则匹配反斜杠'\'和美元'$'的方法
2017/02/08 PHP
PHP简单实现正则匹配省市区的方法
2018/04/13 PHP
Laravel框架学习笔记之批量更新数据功能
2019/05/30 PHP
JavaScript中的细节分析
2012/06/30 Javascript
JS随机漂浮广告代码具体实例
2013/11/19 Javascript
基于javascript实现漂亮的页面过渡动画效果附源码下载
2015/10/26 Javascript
javascript实现加载xml文件的方法
2015/11/24 Javascript
在JavaScript中call()与apply()区别
2016/01/22 Javascript
JavaScript中的对象和原型(一)
2016/08/12 Javascript
JavaScript学习笔记整理_关于表达式和语句
2016/09/19 Javascript
Javascript使用SWFUpload进行多文件上传
2016/11/16 Javascript
基于LayUI实现前端分页功能的方法
2017/07/22 Javascript
JS拖拽排序插件Sortable.js用法实例分析
2019/02/20 Javascript
vue 使用element-ui中的Notification自定义按钮并实现关闭功能及如何处理多个通知
2019/08/17 Javascript
微信小程序实现滚动加载更多的代码
2019/12/06 Javascript
python类参数self使用示例
2014/02/17 Python
python基础教程之字典操作详解
2014/03/25 Python
Python logging模块学习笔记
2014/05/24 Python
Python实现购物程序思路及代码
2017/07/24 Python
python实现微信接口(itchat)详细介绍
2017/10/23 Python
django自带的server 让外网主机访问方法
2018/05/14 Python
解决Pycharm调用Turtle时 窗口一闪而过的问题
2019/02/16 Python
Python同步遍历多个列表的示例
2019/02/19 Python
Python Scrapy图片爬取原理及代码实例
2020/06/12 Python
HTML+CSS3+JS 实现的下拉菜单
2020/11/25 HTML / CSS
HTML5 History API 实现无刷新跳转
2016/01/11 HTML / CSS
html5中audio支持音频格式的解决方法
2018/08/24 HTML / CSS
美国购买隐形眼镜网站:Lenses For Less
2020/07/05 全球购物
2014年文明创建工作总结
2014/11/25 职场文书
地震慰问信
2015/02/14 职场文书
工程服务质量承诺书
2015/04/29 职场文书
农业项目合作意向书
2015/05/08 职场文书
感恩教育观后感
2015/06/17 职场文书
格列佛游记读书笔记
2015/06/30 职场文书