如何在父组件中强制刷新子组件

2019-08-27  本文已影响0人  陈光展_Gz

一、父组件中,局部视图更新,需要内子组件初始化更新

在业务场景中,先点击首页待办任务分页的第二页,然后已提交任务,这时候表格视图正常已经渲染,但是分页数字仍然显示在2,按正常逻辑,页码应该在1才符合。

1.1 思路一:在点击 已提交任务 时候,把分页组件的当前current值修改为1.

尝试,得知:在第一次首页渲染完成之后,点击待办任务或者已提交任务,只有表格视图的局部重新渲染,而分页组件不会再次渲染,故传值无法实现。

1.2 思路二: 在点击事件发生同时,强制把分页组件初始化刷新,v-if

// 原理就是:采用v-if会销毁组件并且重绘,这样就会重载组件
 <Pagination v-if="hackReset == true" />
// 然后在父组件内的增删改查方法中操作,就好了
<script>
method:{
  forceUpdate(){
    this.hackReset  = false
   // $nextTick 是在下次 DOM 更新完成后,在执行里面的函数,类似于回调
    this.$nextTick(() => {
      this.hackReset = true;
    });
  }
}
</script>

1.3 使用this.$forceUpdate强制重新渲染

如果要在组件内部中进行强制刷新,则可以调用this.$forceUpdate()强制重新渲染组件,从而达到更新目的。

<template>
<button @click="reload()">刷新当前组件</button>
</template>
<script>
export default {
    name: 'comp',
    methods: {
        reload() {
            this.$forceUpdate()
        }
    }
}
</script>
上一篇 下一篇

猜你喜欢

热点阅读