原因:静态路由的最后添加了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")
});
静态路由这里一定要删掉哈,