今天在项目中遇到了一个需求,点击改变数据,之后在页面上立即看到更改后的数据。

在这里插入图片描述
首先,如上图的黄色按钮是通过v-for 循环产生的,data()里只有数据cards:[ … ],cards的值是通过调用后台接口拿到的。

data(){
  return {
    cards:[]
  }
}
<div v-for="card in cards"  :key="card.id">
  <img src="xxx" />
  <div v-if="card.isShow"  @click="cacelHandler(card)">
    <img src="xxxx"  />
  </div>
</div>

这个头像下方的黄色按钮,是根据card.isShow的truthy 决定显示或不显示。
当我点击按钮的时候,把card.isShow 的值变为 false。
可是页面上的黄色按钮还在,并没有如我期望的那样消失。
通过查询资料得知,使用this.$forceUpdate()可以重新渲染组件,这样就可以得到想要的效果。

cacelHandler(card){
  card.isShow = false;
  this.$forceUpdate();
}

vue官方对$forceUpdate的解释是:
$forceUpdate可以迫使 Vue 实例重新渲染。它仅仅影响实例本身和插入插槽内容的子组件,而不是所有子组件。

Logo

前往低代码交流专区

更多推荐