vue3.2/Vite/Ts32: 刷新业务的实现
·
Yin灏
原理:刷新的时候将二级路由组件销毁并进行重建。
定义刷新行为的全局变量
- src / store / modules / setting.ts
import { defineStore } from 'vue';
let useLayOutSettingStore = defineStore('SettingStore', {
state: () => {
return {
refresh: false; // 定义是否刷新
}
}
})
export default useLayOutSettingStore;
处理刷新按钮的点击业务
- src / layout / tabbar / setting / index.vue
<template>
<!-- ... -->
<el-button
size="small"
icon="Refresh"
circle
@click="updateRefresh"
></el-button>
<!-- .... -->
</template>
<script setup lang="ts">
import useLayOutSettingStore from "@/store/modules/setting";
let layoutSettingStore = useLayOutSettingStore();
const updateRefresh = () => {
layoutSettingStore.refresh = !layoutSettingStore.refresh;
};
</script>
监听全局数据 refresh 的改变
- src / layout / main / index.vue
<template>
<router-view v-slot="{ Component }">
<transition name="fade">
<component :is="Component" v-if="flag" />
</transition>
</router-view>
</template>
<script setup lang="ts">
//...
import { watch, ref, nextTick } from "vue";
import useLayOutSettingStore from "@/store/modules/setting";
let layoutSettingStore = useLayOutSettingStore();
let flag = ref(true);
// 监听仓库内部数据的变化
watch(
() => layoutSettingStore.refresh,
() => {
flag.value = false; // 销毁路由组件
// nextTick 可以获取更新后的 dom
// 模板更新完成之后
nextTick(() => {
flag.value = true;
});
}
);
</script>