Vue Router 是 Vue.js 的官方路由。它与 Vue.js 核心深度集成,让用 Vue.js 构建单页应用变得轻而易举。功能包括:
- 嵌套路由映射
- 动态路由选择
- 模块化、基于组件的路由配置
- 路由参数、查询、通配符
- 展示由 Vue.js 的过渡系统提供的过渡效果
- 细致的导航控制
- 自动激活 CSS 类的链接
- HTML5 history 模式或 hash 模式
- 可定制的滚动行为
- URL 的正确编码
第一章 入门
router 路由,因为vue是单页应用不会有那么多html让我们跳转所以要使用路由做页面的跳转,Vue 路由允许我们通过不同的 URL 访问不同的内容,通过 Vue 可以实现多视图的单页Web应用。
构建前端项目
npm init vue@latest
//或者
npm init vite@latest
安装vue-router
// 目前默认版本是4.x版本
yarn add vue-router
在src目录下面新建router文件夹,然后在router文件夹下面新建index.js
//引入路由对象
import { createRouter, createWebHistory, createWebHashHistory, createMemoryHistory, RouteRecordRaw } from 'vue-router'
//vue2 mode history => vue3 createWebHistory
//vue2 mode hash => vue3 createWebHashHistory
//vue2 mode abstact => vue3 createMemoryHistory
// 定义一些路由
// 每个路由都需要映射到一个组件。
const routes: Array<RouteRecordRaw> = [{
path: '/',
component: () => import('../components/a.vue')
},{
path: '/b',
component: () => import('../components/b.vue')
}]
const router = createRouter({
history: createWebHistory(),
routes
})
//导出router
export default router
- router-link
请注意,我们没有使用常规的
a
标签,而是使用一个自定义组件router-link
来创建链接。这使得 Vue Router 可以在不重新加载页面的情况下更改 URL,处理 URL 的生成以及编码。我们将在后面看到如何从这些功能中获益。
- router-view
router-view
将显示与 url 对应的组件。你可以把它放在任何地方,以适应你的布局。
<template>
<div>
<h1>只会番茄炒蛋</h1>
<div>
<!--使用 router-link 组件进行导航 -->
<!--通过传递 `to` 来指定链接 -->
<!--`<router-link>` 将呈现一个带有正确 `href` 属性的 `<a>` 标签-->
<router-link to="/">跳转a</router-link>
<router-link style="margin-left:200px" to="/b">跳转b</router-link>
</div>
<hr />
<!-- 路由出口 -->
<!-- 路由匹配到的组件将渲染在这里 -->
<router-view></router-view>
</div>
</template>
最后在main.js挂载
import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
createApp(App)
.use(router)
.mount('#app')
第二章 命名路由 or 编程式导航
命名路由
除了path之外,还可以为任何路由提供name。这有以下几点优势:
- 没有硬编码的 URL
params
的自动编码/解码。- 防止你在 url 中出现打字错误。
- 绕过路径排序(如显示一个)
const routes = [
{
path: '/',
name: 'A',
component: () => import('../components/a.vue')
},
{
path: '/b',
name: 'B',
component: () => import('../components/b.vue')
},
]
router-link跳转的方式可以变更对象
<template>
<div>
<h1>只会番茄炒蛋</h1>
<div>
<!--使用 router-link 组件进行导航 -->
<!--通过传递 `to` 来指定链接 -->
<!--`<router-link>` 将呈现一个带有正确 `href` 属性的 `<a>` 标签-->
<router-link :to="{ name: 'A' }">跳转a</router-link>
<router-link style="