vue中数据更新视图不更新的问题

遇到这样一个问题, 代码如下:

this.memberLevelList.forEach(item => {

  item.levelDate = [item.startTime, item.endTime];

})

startTime和endTime是从后台获取的数据, 但是模板中需要levelDate, 于是直接赋值,

最后打印的memberLevelList结果中也有levelDate的数据, 但是页面上始终不渲染;

看了一下memberLevelList的observer(观察者), 发现并没有levelDate这个数据;

原因:

Vue不能检测3种情况下的数组变动:

1. 通过数组的索引修改他的值,
2. 修改数组的length;

3. 监测不到data中未定义的值

解决办法: Vue.set手动更新

this.memberLevelList.forEach(item => {

  this.$set(item, ‘levelDate‘, [item.startTime, item.endTime])

})

原文地址:https://www.cnblogs.com/Shysun/p/10465917.html

时间: 2024-10-10 07:48:21

vue中数据更新视图不更新的问题的相关文章

vue中命名视图实现经典布局

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" con

vue中nextTick的理解

A. vue 中的 nextTick 是什么? 1.首先需要清楚,nextTick是一个函数:这个函数的作用,简单理解就是下一次渲染后才执行 nextTick 函数中的操作: 2.在下一次 DOM 更新循环结束之后延迟回调,也就是延迟执行一段代码. B. 什么情况下使用 nextTick 函数? 当项目数据改变后,需要对新改动的元素进行视图操作的时候,可能数据值已经进行修改,但是视图还没更新,直接操作报错的时候: C. nextTick函数解决什么问题? 数据值修改,视图没有立即更新,直接使用提

详解Vue中的nextTick

Vue中的nextTick涉及到Vue中DOM的异步更新,感觉很有意思,特意了解了一下.其中关于nextTick的源码涉及到不少知识,很多不太理解,暂且根据自己的一些感悟介绍下nextTick. 一.示例 先来一个示例了解下关于Vue中的DOM更新以及nextTick的作用. //模板 <div class="app"> <div ref="msgDiv">{{msg}}</div> <div v-if="msg1

解决vue中对象属性改变视图不更新的问题

在使用VUE的过程中,会遇到这样一种情况, vue data 中的数据更新后,视图没有自动更新. 这个情况一般分为两种, 一种是数组的值改变,在改变数组的值的是时候使用索引值去更改某一项,这样视图不会实时更新 第二种情况是改变了对象的某一项,但是其他依赖这个数据的视图没更新 第一种情况是因为直接通过索引去改变数组,vue 对象监听不到他的变化 所以没有更新. ----解决方法  1. Vue.set(example1.items[0], { childMsg: 'Changed!'}) 2.使用

Vue 中视图更新

当vue的data中的值发生变化后,视图中引用部分的值是否会同时发生变化呢?首先,我们要知道有哪些更新的类型. 更新的类型 1.直接赋值更新.this.heros=[' '],模板会立即更新. 2.通过函数更新.this.heros.push("xx). 更新的函数: push():在数组最后添加元素: pop():删除最后一个元素: shift():删除最后一个元素: unshift():在开头添加一个元素: splice():可以增加.修改.删除元素.splice函数使用方法:其需要传递开始

vue中什么样的数据可以是在视图中显示

1. Vue中不可以添加不存在的属性,因为不存在的属性是没有getter和setter的. <div id="app"> {{msg.a}} {{msg.b}} </div> <script src="js/vue.js"></script> <script> let vm = new Vue({ el: "#app", data: { msg: { a: 1 } } }) vm.msg

vue 数据改变但是视图没更新

在使用过程中会出现数据改变但是视图没有更新的情况(类型数组或者对象),这里我们就需要用到 $set 如果是对象类型: this.$set(this.userInfo, 'name', 'gionlee'); 其中this.userInfo 为变量名称, 'name' 为对象的key,'gionlee'为name对应的值. 如果是数组类型: this.$set(this.arr, 0, 'gionlee'); 其中this.arr 为数组,0 为 this.arr 对象的下标值,'gionlee'

Vue中控制更新的方式

一.  强制更新的实例方法   vm.$forceUpdate() 迫使 Vue 实例重新渲染.注意它仅仅影响实例本身和插入插槽内容的子组件,而不是所有子组件. 在没有留意到数组或对象的变更检测注意事项,或者你可能依赖了一个未被 Vue 的响应式系统追踪的状态. 然而,如果你已经做到了上述的事项仍然发现在极少数的情况下需要手动强制更新,那么你可以通过 $forceUpdate 来做这件事. 二.   通过 v-once 创建低开销的静态组件 渲染普通的 HTML 元素在 Vue 中是非常快速的,

横冲直撞vue(第三篇):vue中template的三种写法、v-bind、v-on、更新元素的指令v-text与v-html、条件渲染指令v-if 与v-show、v-for

一.vue中template的三种写法 第一种(字符串模板写法): 直接写在vue构造器里,这种写法比较直观,适用于html代码不多的场景,但是如果模板里html代码太多,不便于维护,不建议这么写. <body> <div id="app"></div> <script src="./lib/vue.js"></script> <script type="text/javascript&qu