useLayOutSettingStore仓库
//layout组件相关配置
import { defineStore } from 'pinia'
const useLayOutSettingStore = defineStore('SettingStore', {
state: () => {
return {
refresh: false, //用于控制刷新效果
}
},
})
export default useLayOutSettingStore
父组件
<el-button
size="small"
icon="Refresh"
circle
@click="updateRefsh"
>
</el-button>
<el-main
class="layout_main"
>
<!-- 路由出口,封装成组件是为了加上过渡动画 -->
<Main></Main>
</el-main>
<script setup lang="ts">
//刷新按钮点击回调
const updateRefsh = () => {
layoutSettingStore.refsh = !layoutSettingStore.refsh
}
</script>
子组件Main
<template>
<!-- 路由组件出口的位置 -->
<router-view v-slot="{ Component }">
<transition name="fade">
<!-- 渲染layout一级路由组件的子路由 -->
<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.refsh, () => {
//点击刷新按钮:路由组件销毁
flag.value = false;
nextTick(() => {
flag.value = true;
})
})
</script>
<script lang="ts">
export default {
name: 'Main',
}
</script>
<style scoped>
.fade-enter-from {
opacity: 0;
transform: scale(0);
}
.fade-enter-active {
transition: all 0.3s;
}
.fade-enter-to {
opacity: 1;
transform: scale(1);
}
</style>