当前位置: 首页 > 知识库问答 >
问题:

vue.js - 解决Vue中<keep-alive>导致页面切换异常的问题?

吕鹏
2024-08-21

当前代码如下,需要实现不同页面的切换,并且实现缓存效果,但目前缓存效果未实现。

<router-view v-slot="{ Component, route }">
            <keep-alive>
                <transition :name="transitionName">
                    <div :key="route?.name" style="width: 100%;height: 100%;position: absolute;left: 0;top: 0;">
                        <component :is="Component" />
                    </div>
                </transition>
            </keep-alive>
        </router-view>

在onMounted中输出1来判断是否缓存成功,即首次加载该页面输出1,进入二级界面后返回将不在输出1。尝试修改后如下

    <router-view v-slot="{ Component, route }">
    
            <transition :name="transitionName">
                <keep-alive>
                        <component :is="Component" v-if="route?.meta?.isKeepAlive || route?.meta?.isRouterKeepAlive"
                            :key="route?.meta?.isRouterKeepAlive ? route?.fullPath : route?.name" 
                            style="width: 100%;height: 100%;position: absolute;left: 0;top: 0;"/>
                </keep-alive>
            </transition>

    </router-view>

缓存虽然实现了,但是页面切换变得混乱。如何同时保留页面切换与缓存的效果呢?

共有1个答案

斜宁
2024-08-21

这样试下

<template>
  <router-view v-slot="{ Component, route }">
    <transition :name="transitionName">
      <keep-alive :include="shouldCache(route)">
        <component :is="Component" 
                   :key="route.fullPath"
                   @mounted="onMountedHandler"
                   style="width: 100%; height: 100%; position: absolute; left: 0; top: 0;" />
      </keep-alive>
    </transition>
  </router-view>
</template>

<script setup>
import { ref, onBeforeRouteUpdate, useRoute } from 'vue-router';
import { onMounted } from 'vue';

const route = useRoute();
const transitionName = ref('fade'); // 默认过渡名称

// 监听路由的变化
onBeforeRouteUpdate((to, from) => {
  // 在路由变更之前改变过渡名称
  transitionName.value = `${to.name}-transition`;
});

// 判断是否应该缓存当前组件
function shouldCache(route) {
  return route.meta.isKeepAlive || route.meta.isRouterKeepAlive ? route.name : null;
}

// 处理 mounted 钩子事件
function onMountedHandler() {
  console.log(1);
}
 类似资料:
  • 本文向大家介绍基于vue中keep-alive缓存问题的解决方法,包括了基于vue中keep-alive缓存问题的解决方法的使用技巧和注意事项,需要的朋友参考一下 vue开发的时候,我们经常会有这样的需求:开发一个详细页面来展示商品的详细信息,根据列表页传入的id进行请求,拿到对应的数据进行渲染。 但是一般在路由上都会加上keep-alive保持数据的状态,除非强制无缓存刷新,这就导致第一次进入详

  • 本文向大家介绍解决AngualrJS页面刷新导致异常显示问题,包括了解决AngualrJS页面刷新导致异常显示问题的使用技巧和注意事项,需要的朋友参考一下 绪   俗话说,细节决定成败,编程亦是如此。编程过程中我们可能会不自觉的忽视一些细节问题,殊不知,这些细节正是导致页面显示出现问题的地方。今略举一例,与君共勉之。 页面正常加载后,显示如下: 按F5刷新之后,页面如下所示: 很明显,页面显示出现

  • 本文向大家介绍Vue中keep-alive组件的深入理解,包括了Vue中keep-alive组件的深入理解的使用技巧和注意事项,需要的朋友参考一下 前言 最近在写Vue项目的时候,遇到了一个问题,我从A路由使用parmas方式传参跳转到B路由,然后从B路由跳转到C路由,再从C路由返回B路由的时候,发现从A路由传到B路由的参数已经不存在了。 正文 我们都知道,vue组件进行路由跳转时,会销毁当前组件

  • 非标准 这个功能是非标准的,不在标准轨道上。不要在面向 Web 的生产站点上使用它:它不适用于每个用户。实现之间也可能存在很大的不兼容性,并且行为在未来可能会发生变化。 Keep-Alive一般报头允许发送者提示关于如何连接,并且可以被用于设置超时时间,并且请求的最大数量。 Connection头需要被设置为“保活”这个标题有任何意义。此外,Connection和Keep-Alive在 HTTP

  • 1. 前言 本小节我们将介绍 Vue 的动态组件以及缓存 keep-alive 的使用。包括动态组件的使用方法,以及如何使用 keep-alive 实现组件的缓存效果。 2. 慕课解释 动态组件是让多个组件使用同一个挂载点,并动态切换。动态组件是 Vue 的一个高级用法,但其实它的使用非常简单。keep-alive 是 vue 的内置组件,能在组件切换过程中将状态保留在内存中,防止重复渲染 DOM

  • 描述:切换一个新的没打开的界面。就会触发打开界面的created。 解释:当前打开A界面,从A界面进入B界面,A界面触发created。再打开C界面,A界面又触发created。 B界面和C界面已经打开过,这时候随便切换,不再触发A界面的created 解决了:router-view 多加了key导致的刷新

  • Props: include - 字符串或正则表达式。只有匹配的组件会被缓存。 exclude - 字符串或正则表达式。任何匹配的组件都不会被缓存。 用法: <keep-alive> 包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。和 <transition> 相似,<keep-alive> 是一个抽象组件:它自身不会渲染一个 DOM 元素,也不会出现在父组件链中。 当组件在 <keep-

  • 我最近遇到了一个问题,我们的一个遗留应用程序依赖于UPS跟踪API。UPS更改了其通信协议以要求TLSv1。2.不幸的是,JDK1.6的最新公共版本似乎不支持此协议,因此我的选择是支付oracle支持合同或升级到JDK1.7。我升级到了1.7 我改变了项目的依赖关系,一切看起来都很好。当我尝试实际部署到应用程序服务器时,失败了,错误如下: com.sun.xml.bind.v2.runtime.I