默认安装:安装的是最新版本的,需和脚手架版本保持一致,不然容易报错!
npm i vue-router --save
vue2项目中指定版本号安装:
npm i vue-router@^3.5.3 --save
在 src 源代码目录下,新建 router/index.js 路由模块,并初始化如下的代码:
// 1.导入 vue 和 VueRouter 的包
import Vue from 'vue'
import VueRouter from 'vue-fouter'
// 2.调用Vue.use() 函数,把VueRouter安装为Vue的插件
Vue.use(VueRouter)
//3.创建路由的实例对象
const router new VueRouter( )
//4.向外共享路由的实例对象
export default router
在 src/main.js 入口文件中,导入并挂载路由模块。示例代码如下:
import Vue from 'vue'
import App from ' . /App. vue '
// 1.导入路由模块
import router from '@/ router '
new Vue({
render: h => h(App),
// 2.挂载路由模块
router: router
}).$mount('#app')
4)声明路由链接和路由出口
在 src/App.vue 组件中,使用 vue-router 提供的 <router-link> 和 <router-view> 声明路由链接和出口:
<template>
<div class=" app-container">
<h1>App组件</h1>
<!-- 1.定义路由链接 -->
<router-link to=" /home">首页</router-link>
<router-link to=" /movie" >电影</router-link>
<router-link to=" /about" >关于</router-link>
<!-- 2.定义路由出口 -->
<router-view></router-viewp>
</div>
</template>
5)声明路由的匹配规则
在 src/router/index.js 路由模块中,通过 routes 数组声明路由的匹配规则。示例代码如下:
//1.导入需要使用路由切换展示的组件
import Home from '@/components/Home.vue'
import Movie from '@/components/Movie.vue'
import About from '@/components/About.vue'
//2.创建路由的实例对象
const router = new VueRouter({
routes:
[//在routes数组中,声明路由的匹配规则
// path表示要匹配的hash地址; component 表示要展示的路由组件
{ path: ' /home', component: Home },
{ path: ' /movie', component: Movie },
{ path: ' /about',component: About }
]
})
6)路由重定向
路由重定向指的是:用户在访问地址 A 的时候,强制用户跳转到地址 C ,从而展示特定的组件页面。
通过路由规则的 redirect 属性,指定一个新的路由地址,可以很方便地设置路由的重定向:
const router = new VueRouter({
//在routes数组中,声明路由的匹配规则
routes: [
//当用户访问/的时候,通过redirect 属性跳转到/home对应的路由规则
{ path: '/', redirect: ' /home' },
{ path: ' /home', component: Home },
{ path: ' /movie', component: Movie },
{ path: ' /about', component: About }
})
7)路由传参
1. $route.params 参数对象
在动态路由渲染出来的组件中,可以使用 this.$route.params 对象访问到动态匹配的参数值。
<template>
<div class="movie- container">
<!-- this. $route 是路由的“参数对象”-->
<h3>Movie组件-- {{ this.$route.params.id }}-</h3>
</div>
<
/ template>
<script>
export default {
name: ' Movie
}
</script>
2.使用 props 接收路由参数
为了简化路由参数的获取形式,vue-router 允许在路由规则中开启 props 传参。示例代码如下:
// 1、在定义路由规则时,声明props: true选项,
//
即可在Movie组件中,以props的形式接收到路由规则匹配到的参数项
{ path: ' /movie/ :id', component: Movie, props: true}
<temp late>
<!-- 3、直接使用props 中接收的路由参数-->
<h3>MyMovie组件--- {{id}}</h3>
</ template>
<scr ipt>
export default {
props: ['id'] // 2、使用props接收路由规则中匹配到的参数项
}
</script>
8)vue-router 中的编程式导航 API
vue-router 提供了许多编程式导航的 API,其中最常用的导航 API 分别是: ① this.$router.push('hash 地址') ⚫ 跳转到指定 hash 地址,并增加一条历史记录 ② this.$router.replace('hash 地址') ⚫ 跳转到指定的 hash 地址,并替换掉当前的历史记录 ③ this.$router.go(数值 n) ⚫ 实现导航历史前进、后退
$router.push
调用 this.$router.push() 方法,可以跳转到指定的 hash 地址,从而展示对应的组件页面。示例代码如下:
<temp late>
<div class="home-container">
<h3>Home组件</h3>
<button @click=" gotoMovie">跳转到Movie页面</button>
</div>
</ template>
<script>
export default {
methods: {
gotoMovie() { this. $router . push( ' /movie/1') }
}
</script>
$router.replace
调用 this.$router.replace() 方法,可以跳转到指定的 hash 地址,从而展示对应的组件页面。
push 和 replace 的区别: ⚫ push 会增加一条历史记录 ⚫ replace 不会增加历史记录,而是替换掉当前的历史记录
$router.go
调用 this.$router.go() 方法,可以在浏览历史中前进和后退。示例代码如下:
<template>
<h3> MyMovie组件--- {{id}}</h3>
<button @click-" goBack">后退</button>
</ template>
<scr ipt>
export default {
props: ['id'],
methods: {
goBack() { this. $router .go0(-1) } //后退到之前的组件页面
},
}
</script>
$router.go 的简化用法
在实际开发中,一般只会前进和后退一层页面。因此 vue-router 提供了如下两个便捷方法: ① $router.back() ⚫ 在历史记录中,后退到上一个页面 ② $router.forward() ⚫ 在历史记录中,前进到下一个页面
$route和$router区别:
$route: 路由信息对象 $router: 路由实例对象