0
点赞
收藏
分享

微信扫一扫

Vue3使用路由开发(三)

王远洋 2022-05-28 阅读 57


导航守卫

导航守卫包括全局守卫、路由独享守卫和组件内守卫,可以在路由导航过程中的不同阶段。其中每一个导航守卫都有两个参数​​to​​和​​from​​。

其中全局守卫包括全局前置守卫、全局解析守卫和全局后置钩子。全局前置守卫是当一个导航触发时,可以按照创建的顺序进行调用。而且守卫是可以异步解析执行。如果导航所有守卫没有完成解析之前会一直处于挂起状态。全局前置守卫的注册使用​​router.beforeEach()​​方法。如果取消导航,设置返回值为​​false​​,如果想要路由重定向到另一个位置,可以返回一个路由位置对象。调用的方法和路由调用push方法一样。传递接收的值可以是字符串或者布尔值。返回路由对象位置时,会删除当前的导航,并且使用相同的​​from​​去创建一个新的导航。当出现其他情况时,可能也会抛出一个错误为​​Error​​对象。这时候会调用​​onError()​​注册的任何回调而且会取消导航。我们需要注意的是如果没有任何返回值和​​undefined​​或者​​true​​时,就会验证导航并且调用下一个导航守卫。全局解析守卫使用的是​​beforeResolve()​​进行注册,解析守卫这个方法和路由的​​beforeEach()​​方法很像。但是不同的是,解析守卫被调用是在导航被确认之前,所有的路由内守卫和异步路由组件被解析之后。

router.beforeEach(async (to, from) => {
return await taeZss(to)
})

全局后置钩子是使用​​afterEach()​​进行注册,调用是在导航被确认之后。它和守卫不同的是,全局后置钩子不接受可选的​​next()​​函数,也不会去改变导航。在全局后置钩子中还可以接收另一个参数,用来表示导航失败的​​failure​​参数,用来作为第三个参数。而且全局后置钩子在很多情况下很有用,例如分析或者更改页面标题以及发布页面时。我们在定义路由时,​​routes​​的配置中每个路由对象中都可以拥有一个​​meta​​字段,这个字段是用来给路由提供一个元数据信息。该字段可以设置页面的标题。​​meta​​字段还可以用来对资源的保护,需要添加一个验证属性​​requireAuth​​,,在全局前置守卫中进行判断,如果访问的是保护的资源,就判断用户是否已经登录,如果登录则可以访问。如果没有登录则跳转到登录页面。

举报

相关推荐

0 条评论