Vue快速上手:十、Vue路由的基本使用(1)

88 阅读5分钟

安装

使用脚手架安装

在使用Vue脚手架创建项目时,在项目选项中选择使用vur-router,项目创建后安装项目依赖的时候会自安装。

手动安装

在项目目录中使用终端命令npm install vue-router,即可安装。

开始使用

1、使用路由前的一些准备

我们知道一般要使用路由功能肯定是有不同的页面跳转需求,不然如果就只有一个界面那自然是没必要使用路由功能的,所以在使用前我们得都确立有哪些页面、并创建好这些页面的组件。

我们创建一个views目录用来存放页面组件,然后分别创建首页(Index.vue)、列表页(List.vue)、内容页组件(Content.vue)。

2、创建路由实例

创建一个目录routes来用来存储路由相关的操作的文件,在其下新建一个index.js文件用来创建路由的实例并导出。

使用createRouter方法创建路由实例,一个路由实例必须包含路由与组件的映射表和路由模式。

创建实例的代码如下:

import { createRouter, createWebHashHistory } from "vue-router";

// 导入页面组件
import Home from "@/views/Index.vue";
import List from "@/views/List.vue";
import Content from "@/views/Content.vue";

// 创建路由映射关系表
const routes = [
    { name: "home", path: "/", component: Home },
    { name: "list", path: "/list", component: List },
    { name: "content", path: "/content", component: Content }
];

// 创建路由实例
const router = createRouter({
    history: createWebHashHistory(), // 使用hash路由模式  
    routes
});

export default router;

3、注册路由插件

main.js中引入router/index.js中导出的路由实例,然后使用use方法注册路由插件,如下:

import './assets/main.css'

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'; // 引入路由实例

const app = createApp(App);
app.use(router) //  在项目中注册路由

app.mount('#app');

4、在组件中使用路由功能

路由注册完毕后,就可以开始使用路由了,使用RouterLink 组件可在页面中跳转已注册的任意的组件,使用RouterView来表示路由组件渲染的具体位置,在app.vue中我做如下设置:

<template>
    <nav>
        <RouterLink to="/">首页</RouterLink>
        <RouterLink to="/list">列表页</RouterLink>
        <RouterLink to="/content">内容页</RouterLink>
    </nav>
    <main>
        <!-- 使用RouterView告诉Vue在此处渲染路由组件 -->
        <RouterView></RouterView> 
    </main>
</template>

<script setup>
    import { RouterLink } from 'vue-router';
</script>

<style scoped>
    .container {
        width: 600px;
    }
</style>

以上就完成了一个路由最简单的使用过程。

路由模式

在上面创建路由实例的过程中使用了createWebHashHistory这个方法,这个就是创建hash路由模式,同样Vue-Router也支持其它的路由模式:

  • Hash 模式

使用createWebHashHistory()方法创建,hash路由模式前面已经介绍过。

  • Memory 模式

使用createMemoryHistory()方法创建,创建一个基于内存的历史,Memory 模式不会假定自己处于浏览器环境,一般用在服务端渲染模式中,但你仍可以在浏览器应用程序中使用此模式,但请注意它不会有历史记录,这意味着你无法后退或前进

  • HTML5 模式

使用createWebHistory()方法创建,就是上一章说过的使用浏览器history记录来实现的。

路由导航

1、使用RouterLink导航

RouterLink用来渲染一个链接的组件,该链接在被点击时会触发导航,其实在渲染之后就是一个a标签。

  • to属性

设置目标路由,也就是需要跳转的路由的地址,可以是一个字符串,如:<RouterLink to="/list">列表页</RouterLink>,也可以是一个对象,如:<RouterLink :to=" { path: "/list" } ">首页</RouterLink>

  • replace属性

replace属性为true时,代表这个链接跳转不会被记录到历史记录中,也就是这个跳转操作,点击浏览器后退按钮无法退回。

  • tag属性

tag属性表示将使用什么标签去渲染,默认是a标签,如这个值为li则代表使用li标签渲染。

  • active-class属性

表示当前链接被激活后的css样式。

还有更多可以去Vue-Router官网中查看。

2、编程式导航

RouterLink是在生成模板中跳转链接的方式,同时Vue-Router也有在JS代码中的路由跳转方式。

<template>
    <ul>
        <li @click="handleToPath('/')">首页</li> <!-- 使用一个路径字符 -->
        <li @click="handleToPath({path: '/list'})">列表页</li> <!-- 使用路径对象 -->
        <li @click="handleToPath('/content')">内容页</li>
    </ul>
    <main>
        <!-- 使用RouterView告诉Vue在此处渲染路由组件 -->
        <RouterView></RouterView> 
    </main>
</template>

<script setup>
    import { useRouter } from "vue-router";

    const router = useRouter();

    const handleToPath = path => router.push(path);
</script>

<style scoped>
    li {
        display: inline;
        margin: 0 10px;
        cursor: pointer;
    }
</style>

如以上先使用useRouter获取当前路由实例,然后操作路由实例的pushreplacego等方法便可以操作路由了。

  • push方法

push方法可跳转到对应的路由界面,并且记录此次跳转的历史记录,同样push方法的参数可以使用一个字符或对象都可。

const router = useRouter();

router.push("/list"); // 使用路径字符
router.push({ path: '/list' }); 使用对象

在使用对象进行路由跳转的时候同样也可以向跳转的路由传递参数,如:

// 命名的路由(名字需与路由映射表对应)并加上参数,让路由建立 url
router.push({ name: 'user', params: { username: 'eduardo' } })

// 带查询参数,结果是 /register?plan=private
router.push({ path: '/register', query: { plan: 'private' } })

// 带 hash,结果是 /about#team
router.push({ path: '/about', hash: '#team' })
  • replace

replace方法同样也是跳转到对应路由界面,但是不创建新的路由历史记录,无法使用后退功能回到此界面,使用方式和push方法一样。

  • go

go方法是用来横跨历史记录的,可以跨跃式切换路由界面。

// 向前移动一条记录,router.forward() 同样具有相同功能
router.go(1)

// 后退一条记录,router.back() 同样具有相同功能
router.go(-1)

// 前进 3 条记录
router.go(3)

以上就是本章的内容了,下一章将继续介绍路由的其它操作,如:传参、动态路由、懒加载等、路由元信息等