router.push的报错如何捕获?

                router.push({
                        name: 'xxxxx',
                    })

跳转地址因为权限问题实际上在路由列表内是不存在的,直接报错

我使用了官方文档上的报错捕捉方法都未能捕捉报错,

const navigationResult = await router.push('/my-profile')

if (navigationResult) {
  // 导航被阻止
} else {
  // 导航成功 (包括重新导航的情况)
  this.isMenuOpen = false
}
import { NavigationFailureType, isNavigationFailure } from 'vue-router'

// 试图离开未保存的编辑文本界面
const failure = await router.push('/articles/2')

if (isNavigationFailure(failure, NavigationFailureType.aborted)) {
  // 给用户显示一个小通知
  showToast('You have unsaved changes, discard and leave anyway?')
}

好像是官网的方法都是捕捉正常跳转的报错,而我的场景是因权限问题导致的,跳转目标不存在,

Uncaught (in promise) Error: No match for
 {"name":"xxxxx","params":{}}

有没有谁知道怎么捕获这个报错,
我自己找到一个解决方法是在跳转前加个hasRoute判断下路由是否存在来避免这种报错场景,但还是没找到捕获报错的方法

阅读 3.5k
3 个回答
router.push({}).catch(error => {
    console.log("报错了", error)
})

不清楚你的路由权限是怎么做的,但是,是否可以从检测要跳转页面的连通性来处理呢,可以参考一下我的文章:https://blog.i-xiao.space/pos...

新手上路,请多包涵

可以使用router.hasRoute(name) 来进行判断当前路由是否存在;
hasRoute 这是文档地址;

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题