初学 Vue-Router 教程总结

阅读时长 10 分钟读完

Vue-Router 是 Vue.js 官方的路由管理器,它可以帮助我们管理应用中的路由,实现单页应用(Single Page Application,SPA)和多页应用(Multiple Page Application,MPA)。Vue-Router 使用简单,但是它的功能强大,本文将对初学者入门 Vue-Router 的过程进行总结。我们将会主要从如下几个方面来讨论:

  • Vue-Router 的安装和基础使用
  • Vue-Router 传参方式及其区别
  • Vue-Route 路由守卫实现身份验证
  • Vue-Router 在实践中的应用

Vue-Router 的安装和基础使用

在使用 Vue-Router 前,我们需要先安装它。我们可以通过以下命令行来安装它。

使用 Vue-Router 的第一步是在应用中添加路由器。我们可以在 main.js 中添加以下代码:

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

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

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

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

这里我们导入 VueRouter,并调用 Vue.use() 方法将其作为 Vue 插件进行安装。之后,我们创建一个新的 VueRouter 实例,将它们传递给 Vue 实例的 router 选项。

在这里,得到了 router 对象后,我们可以配置 routes 属性,该属性是一个数组,包含所有的路由映射关系。以下是一个路由映射的例子:

这里我们定义了三个路由映射,分别映射到 /home/about/users/userId 路径,并且需要分别渲染 HomeAboutUser 组件。

在定义了路由映射之后,我们就可以在组件中使用 router-link 来创建链接,并且使用 router-view 来渲染组件了。

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

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

在这里,我们在 template 中创建了三个 router-link,并通过 :to 属性来指定了跳转地址。在 User 路径中,我们使用了动态路由来实现传递 userId 的操作。

在组件中使用 router-view 可以让路由动态渲染,具体的渲染始终与当前的路由匹配。

Vue-Router 传参方式及其区别

Vue-Router 在传递参数时有几种不同的方式,接下来我们将分别介绍这些方法的区别。

路径参数

这是 Vue-Router 中常见的传参方式之一,通过匹配路由路径中的参数进行传递。在路由路径中可以通过 : 符号来定义路径参数,例如:

在这里,我们定义了一个路径参数 userId,并将其传递给 User 组件。我们可以在组件中通过 $route.params 来获取路径参数。

查询参数

在 Vue-Router 中,我们还可以使用查询参数来传递数据。查询参数必须以 ? 的形式开始,并通过 & 连接不同的参数。例如:

在这里,我们将 userId 作为查询参数传递给 User 组件。在组件中,我们可以通过 $route.query 来获取查询参数。

状态参数

状态参数是一种相对来说比较少见的传参方式,但是它们也是非常好用的。我们可以通过 $router.push 方法来传递状态参数。

在路由跳转时,我们附加了一个状态对象,该状态可以在目标路由组件中通过 $route.meta 来获取。

需要注意的是,使用状态对象来传递参数时,目标路由必须是通过命名路由定义的。

路由属性

最后一种传参方式是路由属性,这种方式类似于状态参数,但是不同之处在于路由属性通常只有目标路由才能访问。我们可以按以下方式定义路由属性。

在这里,我们将 title 和 color 作为路由属性传递给 User 组件,并通过 props 属性来定义。

在目标路由组件中使用 props 来接收路由属性,并进行组件中使用。

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

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

在这里,我们在 User 组件中定义了两个 props,并使用 $props 来访问它们。

需要注意的是,使用路由属性时,我们需要将路由属性声明为组件的 props 中,否则无法正确访问和使用。

Vue-Route 路由守卫实现身份验证

在实际开发中,我们常常需要对某些页面进行身份验证,这时候就需要使用路由守卫来进行认证。路由守卫有三种类型:全局守卫、路由守卫和组件守卫。

全局守卫

全局守卫可以应用到整个应用程序中,例如对于所有页面都需要进行身份验证的情况。

在这里,我们使用 beforeEach 函数来设置全局守卫,它会在路由切换前被调用。在守卫中,我们检查用户是否已经被认证,如果没有认证,我们跳转到登录页。否则,我们调用 next() 来继续进行路由跳转。

路由守卫

路由守卫只应用于特定的路由,它可以通过路由配置对象的 beforeEnter 方法来进行设置。

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

在这里,我们在路由配置对象中设置了 beforeEnter 方法,它在路由切换前被调用。我们还是使用了 isAuthenticated() 的方法进行身份验证。

组件守卫

组件守卫用于特定组件内的路由,实现方式与路由守卫类似,但是需要在目标组件内进行设置。

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

在这里,我们使用了 created 方法来在组件内设置路由守卫,这里也是使用了 isAuthenticated() 来进行认证。

Vue-Router 在实践中的应用

Vue-Router 的使用有多种,这里我们将讨论几个使用场景。

嵌套路由

在 Vue-Router 中,我们可以创建嵌套路由来对应复杂的页面结构。

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

在这里,我们定义了一个嵌套路由。在 / 路径下,我们定义了一个 Home 组件,并且在 children 中再定义了三个路由映射,分别是 DashboardUsersListUser

按需加载

在实际应用中,我们常常需要对页面进行按需加载,减轻初始的加载负担。这时候,常常会使用异步组件来实现。

在这里,我们使用了 import 语句来加载 Home.vue 组件。通过这种方式,组件只在需要时进行加载,提高了应用的性能。

路由切换动画

Vue-Router 还提供了多种方法来处理路由切换动画。我们可以通过设置不同的 CSS 类来实现不同的过渡效果。

在这里,我们定义了两组 CSS 类,它们分别是 fade-enter-activefade-leave-active,以及 fade-enterfade-leave-to。通过这些类名,我们可以实现页面淡入淡出的效果。

在这里,我们使用了 Vue 的过渡组件 transition。它包裹着 router-view,可以在路由切换时,添加不同的 CSS 类名,从而实现不同的过渡效果。

总结

Vue-Router 是 Vue.js 的一个核心插件,它可以帮助我们轻松管理我们的页面路由。在本文中,我们从安装和基本使用,参数传递方式及其区别,路由守卫实现身份验证,实践中Vue-Router的应用等方面,讨论了 Vue Router 的一些重要概念和技术细节。希望这篇文章对初学者能够提升学习效率,对有一定经验的开发者也能够有所启示。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6469aa82968c7c53b0984e81

纠错
反馈