vue-router addRouter添加动态路由后,在子组件上一刷新就404.

原因:静态路由的最后添加了404页面,静态路由的最后是个*优先级高。
苦恼了两天,最后在点击这里
方案:把404页面放到动态路由添加的最后就好。

// 引入路由文件这种的公共路由
// import { constantRoutes } from "../router";
// Layout 组件是项目中的主页面,切换路由时,仅切换Layout中的组件
import Layout from "@/layout";
export function getAsyncRoutes(routes) {
  const res = [];
  // 定义路由中需要的自定名
  const keys = ["path", "name", "children", "redirect", "meta", "hidden"];
  // 遍历路由数组去重组可用的路由
  routes.forEach(item => {
    const newItem = {};
    if (item.component) {
      // 判断 item.component 是否等于 'Layout',若是则直接替换成引入的 Layout 组件
      if (item.component === "Layout") {
        newItem.component = Layout;
      } else {
        //  item.component 不等于 'Layout',则说明它是组件路径地址,因此直接替换成路由引入的方法
        newItem.component = resolve =>
          require([`@/views/${item.component}`], resolve);
        // 此处用reqiure比较好,import引入变量会有各种莫名的错误
        // newItem.component = (() => import(`@/views/admin/${item.component}`));
      }
    }
    newItem.path = item.path;
    newItem.name = item.name;
    newItem.redirect = item.redirect ? item.redirect : null;
    if (item.children) {
      newItem.children = item.children;
    }
    newItem.meta = { title: item.nameZh, icon: item.iconCls };
    // for (const key in item) {
    //     if (keys.includes(key)) {
    //         newItem[key] = item[key]
    //     }
    // }
    // 若遍历的当前路由存在子路由,需要对子路由进行递归遍历
    if (newItem.children && newItem.children.length) {
      newItem.children = getAsyncRoutes(item.children);
    }
    res.push(newItem);
    // res.push(
    //   {
    //     path: "/404",
    //     name: "errorPage",
    //     component: resolve => require([`@/views/404`], resolve),
    //     hidden: true
    //   },
    //   {
    //     path: "*",
    //     name: "errorRedirect",
    //     redirect: "/404",
    //     hidden: true
    //   }
    // );
  });
  res.push({
    path: "*",
    name: "errorPage404",
    hidden: true,
    component: () => import("@/views/404")
  });
  // 返回处理好且可用的路由数组
  return res;
}

核心代码:

  res.push({
    path: "*",
    name: "errorPage404",
    hidden: true,
    component: () => import("@/views/404")
  });

静态路由这里一定要删掉哈,
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值