vue3实现keep-active缓存组件以及组件离开时滚动条位置

1,612 阅读1分钟

1.vue3使用keep-active缓存组件

<div>
        <!-- 多层路由的缓存需要注意  -->
        <router-view v-slot="{Component}">
            <keep-alive include="ListIndex" >
               <component :is="Component" />
            </keep-alive>
        </router-view>
    </div>

2.通过组件内路由守卫,记录离开时滚动条的位置

<script setup>
    import { onBeforeRouteLeave } from 'vue-router';
    import { ref, onActivated, onDeactivated } from 'vue';
    // 路由离开前记录
    const top = ref(0);
    onBeforeRouteLeave((to,from)=>{
        top.value = document.documentElement.scrollTop || document.body.scrollTop; 
    })
</script>

注:不要使用deactivated生命周期,在这个生命周期里组件已经切换了,最后获取的是切换后的页面滚动条位置。

3.利用keep-alive缓存组件的生命周期,激活该组件时滚动到记录的位置

    // keep-alive缓存组件被激活
    onActivated(() => {
        let root = document.documentElement || document.body;
        root.scrollTop = top.value;
    })