如果你希望在尝试导航到一个不存在的 routeName 时,自动重定向到特定的页面(比如一个 404 页面),你可以通过全局的路由守卫(guard)或者 router.push 的错误处理来实现。

方法一:全局前置守卫(Global Before Guard)

你可以使用 Vue Router 的全局前置守卫来检查即将进入的路由是否存在,如果不存在,则重定向到 404 页面。

const router = new VueRouter({
  // ...你的路由配置
});

router.beforeEach((to, from, next) => {
  const routeExists = router.getRoutes().some(route => route.name === to.name);
  if (routeExists) {
    next(); // 如果路由存在,继续正常的导航
  } else {
    next({ name: 'NotFound' }); // 如果路由不存在,重定向到 NotFound 路由
  }
});

在这个例子中,NotFound 应该是你定义的 404 页面的路由名称。

方法二:错误处理

当你使用 router.push 或 <router-link> 进行导航时,你可以捕获可能抛出的错误,并在错误处理中重定向到 404 页面。

router.push({ name: 'someNonExistentRouteName' }).catch(error => {
  if (error.name === 'NavigationDuplicated') {
    // Vue Router 4 中可能会抛出 NavigationDuplicated 错误,但这通常可以忽略
    return;
  }
  router.push({ name: 'NotFound' }); // 在导航错误时重定向到 NotFound 页面
});

或者在全局范围内处理:

router.onError(error => {
  if (error.name !== 'NavigationDuplicated') { // 忽略 NavigationDuplicated 错误
    router.push({ name: 'NotFound' }); // 其他错误时重定向到 NotFound 页面
  }
});

确保你的路由配置中有一个名为 NotFound 的路由,它指向你的 404 页面组件。

const routes = [
  // ...你的其他路由配置
  {
    path: '*', // 通配符路由,匹配任何路径
    name: 'NotFound', // 命名路由 'NotFound'
    component: NotFoundComponent // 404 页面组件
  }
];

这两种方法可以帮助你在尝试导航到一个不存在的命名路由时,自动重定向到 404 页面。选择哪种方法取决于你的具体需求和应用的架构。

博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3