Vue Router概述

Vue Router 是 Vue.js 官方的路由管理器,它和 Vue.js 的核心深度集成,让构建单页应用变得易如反掌。它包含的功能有:

  • 嵌套的路由、视图表。

  • 模块化的、基于组件的路由配置。

  • 路由参数、查询、通配符。

  • 基于 Vue.js 过渡系统的视图过渡效果。

  • 细粒度的导航控制。

  • 带有自动激活的 CSS class 的链接。

  • HTML 5 历史模式或哈希模式。

  • 自定义的滚动条行为。

安装 Vue Router

与安装 Vuex 方法相同,在 HTML 页面中,通过 <script> 标签的方式导入 Vue Router,前提是必须要先导入 Vue.js,如示例代码 7-2-1 所示。

示例代码 7-2-1 导入 Vue Router
<script src="https://unpkg.com/vue@3.2.28/dist/vue.global.js"></script>
<script src="https://unpkg.com/vue-router@4.0.11/dist/vue-router.global.js"></script>

当然,可以将这个链接指向的 JavaScript 文件下载到本地计算机中,再从本地计算机导入即可。

在使用 Vue Router 开发大型项目时,推荐使用 npm 方式来安装。npm 工具可以很好地和诸如 WebpackBrowserify 等模块打包器配合使用。安装方法如示例代码 7-2-2 所示。

示例代码 7-2-2 npm 安装 Vue Router
npm install vue-router@4

一个简单的组件路由

Vue 项目中,使用路由的基本目的就是为了实现页面之间的切换。正如前面章节所述,在单页应用中的页面切换主要是控制一个容器 <div> 的内容,替换、显示或隐藏。下面就用 Vue Router 来控制一个 <div> 容器的内容切换进行演示,如示例代码7-2-3所示。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no">
    <title>vue-router</title>
    <script src="https://unpkg.com/vue@3.2.28/dist/vue.global.js"></script>
    <script src="https://unpkg.com/vue-router@4.0.11/dist/vue-router.global.js"></script>
    <style type="text/css">
        #app {
            text-align: center;
            line-height: 2;
        }
    </style>
</head>
<body>
<!--根实例挂载的 DOM 对象 app-->
<div id="app">
    <p>
        <router-link to="/page1">导航 page1</router-link>
        <router-link to="/page2">导航 page2</router-link>
    </p>
    <router-view></router-view>
</div>

<script type="text/javascript">
    // 创建 page1 的局部组件
    const PageOne = {
        template: '<div>PageOne</div>'
    }
    // 创建 page2 的局部组件
    const PageTwo = {
        template: '<div>PageTwo</div>'
    }

    // 配置路由信息
    const router = VueRouter.createRouter({
        history: VueRouter.createWebHashHistory(), // 路由模式
        routes: [
            { path: '/page1', component: PageOne },
            { path: '/page2', component: PageTwo }
        ]
    })

    const app = Vue.createApp({})
    app.use(router)
    app.mount("#app")
</script>
</body>
</html>

上面的代码是完整的演示代码,可以直接在浏览器中打开。VueRouter.createRouter 方法可以创建路由对象,其中 routes 表示每个路由的配置,history 表示路由模式,在 Vue Router 4 中是必传的,调用 app.use(router) 即可使用路由。

<router-view> 组件是 vue-router 内置的组件,就相当于一个容器 <div>。<router-link> 组件是 vue-router 内置的导航组件,routes 对应的数组是路由配置信息。当我们单击第一个 <router-link> 组件时,会动态改变浏览器的哈希,根据配置的路由信息,当哈希值为 page1 时,便命中了 path: '/page1' 规则,这时 <router-view> 的内容就被替换成了 PageOne 组件,以此类推,PageTwo 组件也是如此。这个代码段的运行效果如图7-1所示。

image 2024 02 23 13 27 32 663
Figure 1. 图7-1 组件路由的演示

这就是所谓的组件路由,把组件类比成页面,每个页面默认是一个组件,当页面的哈希切换到某个路径时,就会匹配到对应的组件,然后将容器的 div 内容替换成这个组件,就实现了页面的切换,这是 vue-router 基本的使用方法。当然,路由配置信息可以支持多种方式,如常用的动态路由匹配。