Vue 路由 Router

什么是路由?

Hash 地址与组件之间的对应关系

前端路由的工作原理?

1.用户点击了页面上的路由链接;

2.导致URL地址栏中的Hash值发生了变化;

3.前端路由监听到了Hash地址变化;

4.前端路由把当前Hash对应的组件渲染到浏览器中;

vue-router 安装和配置的步骤

1.安装vue-router 包

npm i vue-router@3.5.2 -S

2.创建路由模块,并声明路由的匹配规则

在src 源代码目录下,新建router/index.js,并初始化如下代码:

// 1. 导入 Vue 和 VueRouter 的包
import Vue from 'vue'
import VueRouter from 'vue-router'

// 2. 调用 Vue.use() 函数,把VueRouter 安装为 Vue 插件
Vue.use(VueRouter)

// 3. 创建路由的实例对象
const router = new VueRouter({
  routes: [ // 在routes 数组中,声明路由的匹配规则
    // path 表示要匹配的 hash 地址; component 表示要展示的路由组件
    { path: '/home', component: '@/component/Home.vue' },
    { path: '/about', component: '@/component/About.vue' },
  ]
})

// 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
}).$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="about">关于</router-link>

    <hr>

    <!-- 2. 定义路由占位符 -->
    <router-view></router-view>
  </div>
</template>

<script>
export default {

}
</script>

<style>
</style>

嵌套路由

动态路由

动态路由: 把 Hash 地址中可变的部分定义为参数项,从而提高路由规则的复用性

// 1. 路径参数传参规则
{ path: 'home/:id', component: '@component/Home.vue' }

// 页面上使用 $route.params 接收
this.$route.params.id


// 2. 使用 props 传参 ,并接收参数
{ path: 'home', component: '@component/Home.vue', props: true }

<template>
  <div>
    {{id}}
  </div>
</template>

<script>
export default {
  name: '',
  props: ['id'],
}
</script>



路径参数 & 查询参数

在 hash 地址中, / 后面的参数项,叫做“路径参数”,? 后面的参数项,叫做“查询参数”

this.route 中,path 只是路径部分;fullPath 是完成的地址

声明式导航 & 编程式导航

在浏览器中,点击链接实现的导航方式叫做声明式导航( 普通网页中点击 <a> 链接、 vue项目中点击 <router-link> )

在浏览器中,调用API方法实现导航的方式叫做编程式导航( 普通网页中调用 location.href 跳转的方式、 vue-router的API)

vue-router 中的编程式API

1. this.$router.push('hash 地址')

  • 跳转到指定 hash 地址,并增加一条历史记录

2. this.$router.replace(' hash 地址')

  • 跳转到指定的 hash 地址,并替换掉当前的历史记录

3.this.$router.go(数值 n) ===》$router.back() 前进    $router.forward() 后退

  • 实现导航历史前进、后退

全局前置守卫

import VueRouter from 'vue-router'
import Vue from 'vue'

Vue.use(VueRouter)

// 创建路由实例对象
const router = new VueRouter

// 全局前置守卫
router.beforeEach((to, from, next) =>{
  // to 是将要访问路由的信息对象
  // from 是将要离开的路由信息对象
  // next 是一个函数,调用 next() 表示放行,允许这次路由导航,next('hash地址'),next(false)停留在当前页面
})

上一篇:Vue Router ( 路由 )


下一篇:vue-router源码第一步阅读