vue路由缓存,结合router-view中key属性进行配置

文件目录在这里插入图片描述
2.路由配置详情

import Vue from 'vue';
import VueRouter from 'vue-router';
import Home from '../views/Home.vue';
import Layout from '../views/Layout.vue';
import Redirect from '../redirect/redirect.vue';
import problemManage from '../views/problem-manage.vue';
import kpiReport from '../views/kpi-report.vue';
import Preview from '../views/preview.vue';

Vue.use(VueRouter);

const routes = [
  {
    path: '/',
    name: 'Home',
    component: Home
  },
  {
    path: '/layout',
    name: 'layout',
    component: Layout,
    children: [
      {
        path: 'redirect/:name',
        name: 'redirect',
        component: Redirect
      },
      {
        path: 'robotaxi',
        name: 'robotaxi',
        redirect: {
          name: 'problem-manage'
        },
        component: Redirect,
        children: [
          {
            path: 'problem-manage',
            name: 'problem-manage',
            component: problemManage,
            meta: {
              keepAlive: true
            }
          },
          {
            path: 'kpi-report',
            name: 'kpi-report',
            component: kpiReport
          },
          {
            path: 'preview',
            name: 'preview',
            component: Preview
          }
        ]
      }
    ]
  }
];

const router = new VueRouter({
  routes
});

export default router;

home页面

<template>
  <div @click="handle">
    HOME
  </div>
</template>
<script>
export default {
  methods: {
    handle() {
      this.$router.push('layout');
    }
  }
};
</script>

kpi-report页面

<template>
  <div>kpi-report</div>
</template>

layout页面 此页面为主页面 控制组件缓存的逻辑都在这个页面

<template>
  <div>
    <div>
      layout
      <ul>
        <li
          @click="
            () => {
              $router.push('/layout/robotaxi/problem-manage');
            }
          "
        >
          robotaxi
        </li>
        <li
          @click="
            () => {
              $router.push('/layout/robotaxi/preview');
            }
          "
        >
          preview
        </li>
        <li
          @click="
            () => {
              $router.push('/layout/robotaxi/kpi-report');
            }
          "
        >
          kpi-report
        </li>
      </ul>
    </div>
    {{ routeKey }}
    <router-view :key="routeKey" />
  </div>
</template>
<script>
// 需要做缓存的页面
const KEY_VALU = {
  /**
   * example 从preview页面进入problem-manage需要缓存
   * 1.需要配置'problem-manage': 'problem-manage' 让其进入problem-manage这个页面时router-view中key为
   * problem-manage的value值
   * 2.当进入preview页面时 其值也为problem-manage 此时组件复用
   * 3.当进入kpi-report时 由于在KEY_VALUE中没有kpi-report的值所以返回值为fullPath导致router-view值变
   * 化强制不复用组件 路由不进行缓存
   */
  'problem-manage': 'problem-manage',
  preview: 'problem-manage'
};
export default {
  computed: {
    routeKey() {
      console.log(KEY_VALU[this.$route.name]);
      return KEY_VALU[this.$route.name] || this.$route.fullPath;
    }
  }
};
</script>

preview页面

<template>
  <div
    @click="
      () => {
        $router.push('problem-manage');
      }
    "
  >
    preview
  </div>
</template>

problem-manage页面

<template>
  <div>problem-manage{{ Math.floor(Math.random() * 100) }}</div>
</template>

robotaxi页面

<template>
  <div>robotaxi</div>
</template>

redirect页面 此页面做路由缓存

<template>
  <div class="redirect">
    <keep-alive>
      <router-view class="redirect" v-if="$route.meta.keepAlive" />
    </keep-alive>
    <router-view v-if="!$route.meta.keepAlive" />
  </div>
</template>
<script>
export default {};
</script>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值