解决arco-design路由跳转,menu不激活的问题

问题

点击【返回】,路由跳转上一层至首页。左侧菜单栏没有实时更新,激活状态有问题。
在这里插入图片描述

解决方法如下,不闪白屏

Main.vue

<template>
  <div class="main">
    <a-layout class="main-layout">
      <a-layout-header class="main-layout-header">
        <TheHeader />
      </a-layout-header>
      <a-layout>
        <a-layout-sider class="main-layout-sider">
           <!-- 更新左侧侧边栏 -->
          <TheMenu v-if="isRouterActive" /> 
        </a-layout-sider>
        <a-layout-content class="main-layout-content">
          <router-view />
        </a-layout-content>
      </a-layout>
    </a-layout>
  </div>
</template>
<script>
import { provide, nextTick, ref } from "vue";
export default {
  name: "Main",
  setup() {
  // 重新渲染菜单栏状态
    const isRouterActive = ref(true);
    provide("reload", () => {
      isRouterActive.value = false;
      nextTick(() => {
        isRouterActive.value = true;
      });
    });

    return {
      isRouterActive,
    };
  },
};
</script>

TheMenu.vue

<!-- 重点看selectedKeys和openKeys的绑定,其他的忽略 -->
<template>
  <div class="the-menu">
    <a-menu
      :style="{ width: '200px', height: '100%' }"
      :default-selected-keys="selectedKeys"
      :default-open-keys="openKeys"
      show-collapse-button
      breakpoint="xl"
      @collapse="onCollapse"
    >
      <template v-for="(menu, index) in menuList" :key="index">
        <TheMenuItem
          v-if="menu.meta.mapKey == 1"
          :menuData="menu.children[0]"
        />
        <a-sub-menu v-if="menu.meta.mapKey == 2" :key="menu.name">
          <template #title>{{ menu.meta.title }}</template>
          <TheMenuItem v-for="(v, i) in menu.children" :key="i" :menuData="v" />
        </a-sub-menu>
      </template>
    </a-menu>
  </div>
</template>
import { reactive, computed, watch, inject } from "vue";
import { appRoutes } from "@/router/addrouter";
import router from "@/router";

export default function importConfigFunction() {
  const reload = inject("reload");
  const base = reactive({
    menuList: [],
    openKeys: [],
    selectedKeys: [],
    openKeys: computed(() => {
      return router.currentRoute.value.meta.mapPath;
    }),
    selectedKeys: computed(() => {
      return router.currentRoute.value.name;
    }),
  });

  watch(
    () => router.currentRoute.value,
    (newVal) => {
      reload();
    }
  );

  return {
    base,
  };
}
  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值