当前位置: 代码网 > it编程>前端脚本>Vue.js > 【vue3+ts】keep-alive缓存组件,路由跳转后,返回旧的页面依旧保留之前的数据及浏览位置。

【vue3+ts】keep-alive缓存组件,路由跳转后,返回旧的页面依旧保留之前的数据及浏览位置。

2024年08月06日 Vue.js 我要评论
此时还会出现一个问题,就是当我在首页浏览到一定位置后,点击“更多”,路由跳转到列表页面的位置和首页的位置一样。上面一段是官网的解释。简单理解就是缓存组件的,不加它每次访问组件都会重新创建,重新创建也就意味着数据初始化,路由跳转走之后就会摧毁。我的场景是在首页有个点击‘更多’来路由跳转到列表页面。当我从列表页返回到首页时,页面重新刷新了。因为 <Transition>包裹组件的原因,组件内必须只有一个跟节点。包裹动态组件时,会缓存不活跃的组件实例,而不是销毁它们。这样返回到首页时显示的就是之前的页面效果啦。

一、 keepalive的含义

二、场景

三、缓存组件

 在app.vue里

<template>
<router-view v-slot="{component}">
  <transition name="router-fade" mode="out-in">
    <keep-alive>
      <component :is="component"/>
    </keep-alive>
  </transition>
</router-view>
</template>

 router/index.js(ts)

 {
      path: '/',
      name: 'home',
      component: () => import('../views/scene.vue'),
      meta:{
        keepalive:true
      }
 },

 此时你的页面可能会有一个警告: <transition>中的组件呈现不能动画化的非元素根节点。

因为 <transition>包裹组件的原因,组件内必须只有一个跟节点。所以在组件内用个div标签包裹即可

四、保留之前滚动位置

在返回的首页里

//定义变量
const placescroll=ref()
onbeforerouteleave((to, from, next) => {
   //在路由跳转之前,对当前浏览位置进行保存
  placescroll.value = document.documentelement.scrolltop
  next()
})
//组件激活
onactivated(() => {
  if (placescroll.value != null && placescroll.value > 0) {
    //组件激活后进行浏览位置的赋值
    document.documentelement.scrolltop = placescroll.value
    document.body.scrolltop = placescroll.value
  }
})

这样返回到首页时显示的就是之前的页面效果啦

此时还会出现一个问题,就是当我在首页浏览到一定位置后,点击“更多”,路由跳转到列表页面的位置和首页的位置一样。按理说我跳转一个新页面应该在顶部。此时在你跳转的页面里写一段这样的代码即可

//组件激活
onactivated(()=>{
  //组件激活后把页面位置设置为0即可
  document.documentelement.scrolltop = 0
  document.body.scrolltop = 0
})

 

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com