Vuejs2 如何在BeforeRouteEnter中设置next(false)以防止Vue路由器导航到该路由?

Vuejs2 如何在BeforeRouteEnter中设置next(false)以防止Vue路由器导航到该路由?,vuejs2,vue-router,Vuejs2,Vue Router,我迫切希望实现一个导航保护,根据route params中提供的ID,如果项目不存在,它将阻止用户访问项目页面 Vue路由器指南中指出: 下一步(false):中止当前导航。如果浏览器URL已更改(用户手动更改或通过“后退”按钮更改),它将重置为“发件人”路由的URL 然而,在我的组件中,使用next(false)不会阻止路由更改或组件渲染。它甚至不会像文件中承诺的那样导航回去 beforeRouteEnter(to, from, next) { next(false) ajax

我迫切希望实现一个导航保护,根据route params中提供的ID,如果项目不存在,它将阻止用户访问项目页面

Vue路由器指南中指出:

下一步(false):中止当前导航。如果浏览器URL已更改(用户手动更改或通过“后退”按钮更改),它将重置为“发件人”路由的URL

然而,在我的组件中,使用next(false)不会阻止路由更改或组件渲染。它甚至不会像文件中承诺的那样导航回去

beforeRouteEnter(to, from, next) {
    next(false)
    ajaxcall$.subscribe(data => next(vm => vm.setData(data)))
我本以为显而易见的
next(false)
会起作用,阻止组件和路由渲染,但没有。进行ajax调用并设置数据。

“确保下一个函数在通过导航卫士的任何给定过程中只调用一次。”

您有多个
next()
调用

另外,您的
ajaxcall$.subscribe()
很可能是一个异步方法,因此当它调用
next(vm=>vm.setData(data))
时,导航很可能已经发生了

在调用
next()
之前,应该使用
wait
确保ajax中的信息可用


使用API调用减慢每个页面转换的速度可能不是一个好主意,但这是一个不同的问题…

您应该添加
return
语句以避免执行以下表达式(即
return next(false)
)。我认为
next
是一个回调。我不认为回调应该是返回值。返回哪个值(或者是否返回值)无关紧要。关键是您应该在回调调用后立即返回