夜猫子的知识栈 夜猫子的知识栈
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《Web Api》
    • 《ES6教程》
    • 《Vue》
    • 《React》
    • 《TypeScript》
    • 《Git》
    • 《Uniapp》
    • 小程序笔记
    • 《Electron》
    • JS设计模式总结
  • 《前端架构》

    • 《微前端》
    • 《权限控制》
    • monorepo
  • 全栈项目

    • 任务管理日历
    • 无代码平台
    • 图书管理系统
  • HTML
  • CSS
  • Nodejs
  • Midway
  • Nest
  • MySql
  • 其他
  • 技术文档
  • GitHub技巧
  • 博客搭建
  • Ajax
  • Vite
  • Vitest
  • Nuxt
  • UI库文章
  • Docker
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

夜猫子

前端练习生
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《Web Api》
    • 《ES6教程》
    • 《Vue》
    • 《React》
    • 《TypeScript》
    • 《Git》
    • 《Uniapp》
    • 小程序笔记
    • 《Electron》
    • JS设计模式总结
  • 《前端架构》

    • 《微前端》
    • 《权限控制》
    • monorepo
  • 全栈项目

    • 任务管理日历
    • 无代码平台
    • 图书管理系统
  • HTML
  • CSS
  • Nodejs
  • Midway
  • Nest
  • MySql
  • 其他
  • 技术文档
  • GitHub技巧
  • 博客搭建
  • Ajax
  • Vite
  • Vitest
  • Nuxt
  • UI库文章
  • Docker
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 基础

  • 响应式

  • 组件

  • 过渡&动画

  • 可复用性

  • 工具

  • 规模化

  • 路由(核心)

    • 路由基础使用
      • 下载路由插件
      • main.js中引入路由插件
      • 书写路由规则(路由器)
        • 路由模式
      • 在页面中使用路由
        • route-link的replace属性
    • 编程式路由导航
    • 路由懒加载
    • 路由传参
    • 路由守卫
    • 路由缓存及路由前进后退
    • 路由元信息
    • 嵌套(多级)路由
    • 路由过渡动效
  • 组合式

  • Vuex

  • Pinia

  • 其他

  • Vue3 源码学习记录

  • 《Vue》笔记
  • 路由(核心)
夜猫子
2022-04-13
目录

路由基础使用

# route路由基础

# 下载路由插件

npm i vue-router
1

# main.js中引入路由插件

import VueRouter from "vue-router"//引入Router插件
import router from "./router/index"//引入路由规则
Vue.use(VueRouter)//使用Router插件
1
2
3

# 书写路由规则(路由器)

//vue2 版本
import VueRouter from "vue-router";
//其中About.vue和Home.vue分别是两个路由组件 
import About from "../views/About.vue" 
import Home from "../views/Home.vue" 
//创建并暴露一个路由器
export default new VueRouter({
 routes: [
        {//一路径对应一组件
 			path: '/About',
 			component: About,
            //重定向,如果在About路由,默认路由展示Home路由
            //redirect: "/Home",
            //取路由别名,但访问的还是同一个路由
            alias:['/about1','/about2','/about3']
        },
        {
 			path: '/Home',
 			component: Home
        },
    ]
})

//vue3-ts 版本
import { createRouter, createWebHashHistory, RouteRecordRaw } from "vue-router";

const routes: Array<RouteRecordRaw> = [
  {
    path: "/",
    component: () => import("@/components/home.vue"),
  },
  {
    path: "/about",
    component: () => import("@/components/About.vue"),
  },
];

const router = createRouter({
  history: createWebHashHistory(),//hash模式
  routes,
});

export default router;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

# 路由模式

vue 路由中一共有两种模式:

  • history 模式:

    监听 history 提供了的 popstate 事件,其默认参数中的 state 可以获取当前路径以及返回的路径。

    window.addEventListener('popstate',e=>{console.log(e)})
    
    1

    利用 H5 的 history 来实现,history 提供了 pushState 和 replaceState 两种方法,但这两种方法改变 URL 的 path 部分并不会引起页面刷新。

    history.pushState({[state:1],'','/path1'}) //可以传递参数:要传的内容;title属性;路径;
    
    1

    此外通过 js 调用 back、forward、go可以触发 popstate 事件,且提供了对历史记录进行修改的功能。只是当它们执行修改时,虽然改变了当前的 URL,但浏览器不会向后端发送请求。

  • hash 模式: 监听 window hashchange 来实现,默认参数中的 newURL 和 oldURL 可以获取历史信息。

    window.addEventListener('hashchange',e=>{console.log(e)})
    
    1

    url中带了一个 # 号。hash 可以改变URL,但不会触发页面重新加载,即有页面缓存,也有弊端,即不利于 SEO 优化。

# 在页面中使用路由

<template>
 <!-- router语法,跳转的a标签要改为route-link,路径用to中,其中的./一类的去掉. -->
 <!-- active-class是vue-router模块的router-link组件中的属性,用来做选中样式的切换; -->
 <router-link class="list-group-item" active-class="active" to="/About">About</router-link>
 <!-- route-link的replace属性-->
 <router-link replace class="list-group-item" active-class="active" to="/Home">Home</router-link>
 <!-- 路由器视图,即指定组件的呈现位置 -->
 <router-view></router-view>
 <!-- 命名路由器视图-->
 <router-view name='header'></router-view>
 <router-view name='context'></router-view>
</template>
1
2
3
4
5
6
7
8
9
10
11
12

# route-link的replace属性

作用:控制路由跳转的浏览器历史记录操作 历史记录默认为push模式即会追加历史记录,添加了replace后该路由下的所有跳转都会变成替代模式即该路由下的操作无法进行后退前进操作

 <!-- route-link的replace属性-->
 <router-link replace class="list-group-item" active-class="active" to="/Home">Home</router-link>

//如果是编程式路由导航,直接将 push 替换成 replace
router.replace(url)
1
2
3
4
5

注意点:

1.路由组件一般放在views文件里而一般组件通常放在components文件里面 2.通过切换隐藏了的组件默认是被销毁的,需要的时候再去挂载 3.每个组件都有一个自己的$route属性,里面储存着自己的路由信息 4.整个应用只有一个router,可以通过组件的$router属性获取到

编辑 (opens new window)
上次更新: 2023/7/11 18:57:41
路由懒加载
编程式路由导航

← 路由懒加载 编程式路由导航→

最近更新
01
IoC 解决了什么痛点问题?
03-10
02
如何调试 Nest 项目
03-10
03
Provider注入对象
03-10
更多文章>
Copyright © 2019-2025 Study | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式