一、父组件中,局部视图更新,需要内子组件初始化更新
在业务场景中,先点击首页待办任务分页的第二页,然后已提交任务,这时候表格视图正常已经渲染,但是分页数字仍然显示在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>