首页

源码搜藏网

首页 > 开发教程 > js/jQuery教程 >

vue数据变化但页面刷新问题

创建时间:2022-04-22 12:31  

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>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持源码搜藏网。

上一篇:uni-app中弹窗的使用与自定义弹窗
下一篇:没有了

相关内容

热门推荐