有学有练才叫学习:学而不思则罔,思而不学则殆:学而不习,纸上谈兵,习而不进,画地为牢!

Vue 路由基本用法

vue cat 7个月前 (02-22) 132次浏览 已收录 0个评论 扫描二维码

1)路由安装

默认安装:安装的是最新版本的,需和脚手架版本保持一致,不然容易报错!

npm i vue-router --save

vue2项目中指定版本号安装:

npm i vue-router@^3.5.3 --save

2) 使用方式

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

3) 导入并挂载路由模块

在 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: 路由实例对象

喜欢 (0)
cat
关于作者:
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址