今天小编给大家分享一下vue数据变化但页面刷新问题怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
vue数据变化但页面刷新
watch监听到数据的变化但页面没有刷新
在数据改动的代码后加 this.$forceUpdate();
添加this.$forceUpdate();进行强制渲染,效果实现。因为数据层次太多,render函数没有自动更新,需手动强制刷新。
没有监听到数据的变化
例如:
改变了数组中的某一项或者改变了对象中的某个元素时,监听则未生效。
数组若要触发监听,下面方法即可触发
如:splice(),push() 等js方法
当然了,也可以使用vue中的方法 this.$set(object, index, new)
this.$set()方法是vue自带的可对数组和对象进行赋值,并触发监听的方法。
第一个参数为你要改变的数组或对象
第二个参数为下标,或者元素名称
第三个参数为新值
改变了数据却没有自动刷新
有两个按钮,按钮上有个number属性,当此值为偶数时,按钮显示为红色。
最初的数据如下:
"a": [{ name: "one" },{ name: "two",number: 2 }]
现象如下:当点击第一个按钮时,数据变了,界面却没有相应刷新;这是再点击第二个按钮,发现第二个按钮是正常的,并且当第二个按钮刷新的时候,第一个按钮也跟着刷新了。
原因在于:a.number=undefined,这是一个常量,当第一次渲染时,第一个按钮的class并没有和第一个对象的属性number进行绑定,所以当number变化时,不会触发界面刷新。当第二个按钮导致界面刷新时,第
一个按钮也会跟着刷新界面。vue中提供了Vue.$forceUpdate()方法用于强制界面刷新。
说下结论
在绑定属性时,不要绑定undefined的属性,否则无法及时触发界面刷新。
<template> <div> <span v-for="(x,ind) in a" :key="ind" @click="clickSpan(x)" :class="{redNumber:x.number%2==0}"> {{x.name}}: {{x.number}} </span> </div></template>
<script>export default { data() { return { "a": [{ name: "one" },{ name: "two",number: 2 }] } }, methods: { clickSpan(x) { if (!x.number) x.number = 0; x.number += 1 } }}</script>
<style>.redNumber { color: red;}* { font-size: 20px; user-select: none;}</style>
以上就是“vue数据变化但页面刷新问题怎么解决”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。