vue ,v-for循环对象,不是深度克隆? 数据改变了但是页面元素没有更新。问题解决

	<div  id="app">
		<ul >
			<li
			v-for="(val,key,idx) in list"
			>
				{{key}}
				{{val}}
				{{idx}}
			</li>
		</ul>
	</div>

	<script>
		var app = new Vue({
			el: ‘#app‘,
			created(){
				setTimeout(()=>{
					this.listp["1"] = [
						0,1,2,3,4,5
					]
				},1500)
			},
			data: {
				list:{},
				current:1
			},
			methods:{

			}
		})

	</script>

这个例子延迟1.5s之后数据并没有被渲染上dom。

研究了一番,用watch监听 变量 【list】,发现如果不开启【deep:true】 深度监听,watch 也监听不到【list】的改变;

那可能v-for是因为没有深度监听,所以监听不到。
但是也没有找到v-for关于深度监听的设置。

所以直接釜底抽薪,改变写法:

var app = new Vue({
  el: ‘#app‘,
  created () {
    setTimeout(() => {
      let old = Object.assign({}, this.list) // 浅克隆this.list
      old[‘1‘] = [  0, 1, 2, 3, 4, 5  ];
      this.list = old ; // 直接改变 this.list
    }, 1500)
  },
  data: {
    list: {}
  },
  methods: {}
})

  

这样写 数据变化以后 页面元素就相应发生改变了。

有大神有更好的办法 ,希望不吝赐教。

原文地址:https://www.cnblogs.com/wennice/p/9520207.html

时间: 2024-08-29 19:44:34

vue ,v-for循环对象,不是深度克隆? 数据改变了但是页面元素没有更新。问题解决的相关文章

js学习随笔一:对象简单、深度克隆(复制)

javascript的一切实例都是对象,只是对象之间稍有不同,分为原始类型和合成类型.原始类型对象指的是字符串(String).数值(Number).布尔值(Boolean),合成类型对象指的是数组(Array).对象(Object).函数(Function). 既然对象分为这两类,他们之间的最大差别是复制克隆的差别.普通对象存储的是对象的实际数据,而引用对象存储的是对象的引用地址,而把对象的实际内容单独存放,因为引用对象通常比较庞大,这是数据开销和内存开销优化的手段.通常初学者很难理解这部分内

15/8/2 对象简单、深度克隆(复制)

参考:http://qianduanblog.com/post/js-learning-30-object-clone-copy.html 基本数据类型:Boolean/Number/String var a='a'; var b; b=a; b='b'; console.log(a); console.log(b); 基本数据类型的克隆是对象的直接克隆,两者只是值得传递,克隆之后两者没有联系 引用数据类型:Array/Object/Function 数组的克隆 var a = [1,2]; v

vue项目中数据改变之后刷新页面

页面实时更新的方法: 1.window.onload.reload() 2.this.$route.go(0) 3.推荐使用该方法刷新页面 ①  <router-view v-if="isRouterAlive"/> ② APP组件中操作: data 中定义变量 data () { return { isRouterAlive: true } } ③ methods中定义方法 reload() { this.isRouterAlive = false this.$nextT

javascript中对象的深度克隆

零.寒暄 又是一个月多月没有更新博客了,这段时间回学校处理下论文的事情,实习的生活也暂时告一段落(在公司上班,才发现学校里面的生活简直如天堂一般,相信很多已经毕业的小伙伴肯定被我说中了,说中了请给本文点个赞,哈哈!).希望接下来自己的更新进度能加快,马上又是一年校招时,被虐也好.大牛虐别人也罢,总之祝福各位今年要找工作的小伙伴们好运.那么,今天就聊一下一个常见的笔试.面试题,js中对象的深度克隆.翻了下这个题目,在很多地方出现过,已经算一个老的题目了,但是每年的校招中总会考到,其实想想,这个题目

JAVA对象任意深度克隆clone工具类分享

原文:JAVA对象任意深度克隆clone工具类分享 源代码下载地址:http://www.zuidaima.com/share/1550463408114688.htm package com.zuidaima.n_app.util; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import jav

43.对象深度克隆

1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta charset="UTF-8"> 5 <title>对象深度克隆</title> 6 </head> 7 <body> 8 </body> 9 10 <script> 11 //对象深度克隆 12 function cloneObject(o

javascript对象的深度克隆

在做项目的时候需要向对象里面添加新属性,又不想修改原对象.于是就写: var newObj = oldObj,但是新对象属性改变后就对象也会跟着改变,这是因为无论是新对象还是旧对象,指向的内存地址都是一样的,改变了谁都改变了 内存中的数据. 于是找到了一个取巧的方法就是先把旧对象转化为字符串 然后 在转化为对象给新对象,虽然可以达到效果,但是总感觉有点不正规.于是想到了深度克隆 function cloneObjectFn (obj){ // 对象复制 return JSON.parse(JSO

Vue中的混入对象mixins

Vue中的混入对象mixins mixins的定义 混入是分发vue组件中可复用功能的非常灵活的方式.混入对象可以包含任意组件选项,当组件使用混入对象时,所有混入对象的选项将被混入该组件本身的选项. 选项合并规则 当组件和混入对象含有同名选项时,这些选项将以恰当的方式混合: 同名钩子函数将会被混合为一个数组,因此都会被调用(组合) 混入对象的钩子将在组件自身钩子函数之前调用(调用顺序) 数据对象data在内部会进行浅合并(一层属性深度),在和组件的数据发生冲突时以组件数据优先 两个对象键名冲突时

JavaScript实现对象的深度克隆【简洁】【分享】

JavaScript实现对象的深度克隆 代码实现如下: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>clone</title> 6 7 <script type="text/javascript"> 8 //对象深度克隆方法 9 10 11 ////