Vue3 路由守卫

在构建复杂的单页面应用程序(SPA)时,我们经常需要在用户导航到不同的路由之前执行一些操作。这些操作可能包括身份验证检查、权限验证、数据预加载等。Vue Router 提供了多种类型的路由守卫来帮助我们实现这些需求。

全局前置守卫

全局前置守卫是最常用的守卫之一,它会在导航触发时被调用。你可以使用 beforeEach 方法注册一个全局前置守卫:

---------------------- ----- ----- -- -
    -- -- - ---- -- ----- ------------------------------
    -- ---- --------------------------
    
    -- -----------
    -- --------------------- -- ------------------- -
        ---------------
    - ---- -
        -------
    -
---

在这个例子中,我们检查目标路由是否需要身份验证。如果需要但用户未登录,则将用户重定向到登录页面;否则,允许导航继续。

全局解析守卫

全局解析守卫用于在导航被确认之前,对异步路由组件进行预取或预加载数据。使用 beforeResolve 方法可以注册这样的守卫:

-------------------------- ---- ----- ----- -- -
    -- --------------------
    --- -
        ----- -------- - ----- --------------------------------------
        ---------------- - ---------
        -------
    - ----- ------- -
        ------ ----- --------- ------ - -------- ------- -- ---- ---- ------ - ---
    -
---

这个守卫确保在导航被确认之前完成所有必要的数据加载。

全局后置守卫

与前置守卫不同,全局后置守卫不会接受 next 函数,也不会改变导航本身,而是在导航完成后执行。这通常用于记录日志或其他不干涉导航流程的操作:

--------------------- ----- -- -
    ---------------------- ---- ------------ -- -------------
---

这个简单的例子展示了如何在每次导航后记录一条日志。

路由独享的守卫

除了全局守卫外,你还可以为特定的路由定义自己的守卫。这些守卫仅在匹配该特定路由时才会被调用:

路由独享的前置守卫

-
    ----- -----------
    ---------- --------
    ------------ ---- ----- ----- -- -
        -- --- -------- --------
        -- --------------- -
            ----------------------
        - ---- -
            -------
        -
    -
-

组件内的守卫

你也可以在组件内部定义路由守卫,如 beforeRouteEnter, beforeRouteUpdate, 和 beforeRouteLeave。这些守卫方法提供了访问组件实例的能力,因为它们只能在组件实例创建之后被调用:

------ ------- -
    ----- ----------
    -------------------- ----- ----- -
        -- ------------ ------- ---
        ------- -- -
            -----------------
        ---
    --
    --------------------- ----- ----- -
        -- -------------------
        -------------------
        -------
    --
    -------------------- ----- ----- -
        -- ---------------
        ----- ------ - ------------------ --- ------ ---- -- ------ --- ---- ------- -----------
        -- -------- -
            -------
        - ---- -
            ------------
        -
    --
    -------- -
        ---------------- -
            -- --------
        -
    -
--

以上就是在 Vue3 中使用路由守卫的基本介绍。通过合理利用这些守卫,我们可以有效地控制应用的行为,并提供更好的用户体验。


上一篇:Vue3 路由动态参数
下一篇:Vue3 路由懒加载