vue中beforeRouteEnter 触发时机太早,无法被拦截

在组件中,我们使用了beforeRouteEnter来发送请求,通过请求的返回来判断是否允许进入页面。

与此同时我们也做了路由拦截,通过router.beforeEach来进行拦截,如果未登录,则弹去登录页。

现在问题是,如果直接在地址栏输入组件对应的url,那么尽管被拦截跳到登录页了,beforeRouteEnter中的请求依然会发出去,这种问题要怎么办?期望的目标是,路由拦截时,beforeRouteEnter中的函数都不执行,请求也不发送。

经过一番实践,发现beforeRouteEnter的触发时机非常的早,比根实例的 beforeCreate还要早,因此我们现在找不到任何一个钩子来拦截。目前唯一想到的方法,是在main.js中去用location.href来拦截,这对于我们来说,不是一个非常优雅的方案。因此希望得到各位同仁的帮助。

PS:我们说的不能拦截不是说,路由不能拦下来,不让它跳转。我们是可以拦下来的,通过很多种方式。但beforeRouteEnter中经常有一些请求,拦下路由,并不能阻止这些请求的发送,因为beforeRouteEnter的触发时机非常地早。

阅读 5.8k
2 个回答

不是有beforeEach 钩子 ?

把这些请求放到其他钩子里

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