vue中使用KeepAlive保存状态及滚动位置(scrollTop)

项目场景:路由跳转使用KeepAlive保存状态及高度

解决方案:

1.首先需要配置一下keep-alive

第一种方式:

 <router-view v-slot="{ Component }">
          <keep-alive include="Coupe,CoupeDetail">
           <component :is="Component"></component>
          </keep-alive>
 </router-view>

第二中方式:需要在目标路由添加一个meta属性

<keep-alive>
    <router-view v-if="$route.meta.KeepAlive"/>
</keep-alive>

<router-view v-if="!$route.meta.KeepAlive"/>

配置上keepAlive就可以实现状态的保存。

2.目标组件写代码

1.使用ref获取dom,或者使用js直接获取dom
2.keepAlive存在两个生命周期钩子,配合钩子实现代码

<div class="article_list" @scroll="scrollEvent($event)" ref="articleList"><div>
<script setup>
import { ref, toRefs,onActivated,onDeactivated,onMounted } from "vue";
const scrollTop = ref("");
const articleList = ref(null)
	onActivated(() => {
        console.log("子组件");
        articleList.value.scrollTop = scrollTop.value;
    });
	onDeactivated(() => {
        console.log("离开 ...");
    });
    function handlerScroll() {
      scrollTop.value = articleList.value.scrollTop;
        console.log(articleList.value.scrollTop, "778");
    }
    const scrollEvent = debounce(handlerScroll,500)
</script>

即可实现

如果说有需求是 二级子路由跳转到一级路由时,keepAlive可能会失效,需要将当前二级子路由的父路由注册keepAlive

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值