• vue3 动态修改 keepAlive


    需求场景:

    跳转逻辑A跳转 B,B页面 表单填写过程中 跳转 选择地址等额选项时,我们需要将B页面 进行 keepAlive 缓存,达到 返回时不重新渲染

    但是我们需要考虑 从 A 页面到 B 页面 需要全部重新加载,此类场景 我们需要 动态的去控制 keepAlive

    流程图 A页面 > B页面(表单页面) < 互相跳转 > C页面(额外选项 选择地址类似)

    App.vue

    <!-- vue3.0配置 -->
    <router-view v-slot="{ Component }">
        <keep-alive>
            <component :is="Component" :key="route.name" v-if="route.meta.keepAlive" />
        </keep-alive>
        <component :is="Component" :key="route.name" v-if="!route.meta.keepAlive" />
    </router-view>
    复制代码
    import { useRoute } from 'vue-router';
    export default defineComponent({
      name: 'App',
      setup(props) {
          const route = useRoute();
          return { route }
      }
    })
    复制代码

    router.ts

    // ...
    {
        path: 'path/BComponent',
        name: 'BComponent',
        component: BComponent,
        meta: {
            title: 'Page B',
            keepAlive: true
        }
    },
    {
        path: 'path/CComponent',
        name: 'CComponent',
        component: CComponent,
        meta: {
            title: 'Page C',
            keepAlive: false
        }
    },
    复制代码

    B.vue

    import { useRouter, useRoute, onBeforeRouteLeave } from 'vue-router';
    export default defineComponent({
      name: 'B',
      setup(props) {
          const route = useRoute();
          const router = useRouter();
          const changeRouterKeepAlive = (name: string, keepAlive: boolean) => {
    	router.options.routes.map((item: any) => {
                if (item.name === name) {
                        item.meta.keepAlive = keepAlive;
                }
    	});
          };
    
          onBeforeRouteLeave((to, from) => {
    	if (to.name !== 'c') {
                // 不是去 c 页面,不缓存
                changeRouterKeepAlive(from.name as string, false);
    	} else {
                changeRouterKeepAlive(from.name as string, true);
    	}
          });
    
          return { };
      }
    })
    复制代码
  • 相关阅读:
    ipandao markdown mathjax版本
    我们是不是太关注于语法而忽略了算法
    SVGG.JS 入门教程
    关于ipandao编辑器手机访问换行问题
    启明星采购系统新版发布
    仿MSDN的帮助系统
    十分钟打造一款在线的数学公式编辑器
    Search Filter Syntax
    从华为养猪说起,聊聊我对中国计算机发展的一个遗憾-为何我们没有开发出自己的编程语言
    从.NET看微软的焦虑
  • 原文地址:https://www.cnblogs.com/richard1015/p/15602870.html
Copyright © 2020-2023  润新知