vuejs中路由器的两种模式-哈希模式与历史模式

JavaScript的路由 JavaScript的hash路由和history的实现方式! 阅读详情

虽互不曾谋面,但希望能和您成为笔尖下的朋友

以读书,技术,生活为主,偶尔撒点鸡汤

不作,不敷衍,意在真诚吐露,用心分享

点击左上方,可关注本刊

标星公众号(ID:itclanCoder)

如果不知道如何操作

点击这里,标星不迷路

b63ad38defddd26ca3865d0e7f5efab8.png

前言

路由器分别有两种模式,一种是hash模式,另一种是history模式,在使用vue-cli以及vue-router默认搭建的vue项目,如果不做特殊的配置,默认就是hash模式

这两种模式各有自己的优势,但他们的使用区别,却多多少少都会在面试当中被问到

今天就一起来学习下

998b1c340d575fe13959ffecc6fe0581.gif

01

哈希模式(hash)

vue-router默认hash模式,使用url的哈希(hash)来模拟一个完整的URL,当URL改变时,页面不会重新加载

如下所示

http://localhost/#home

特点: #号后面的参数不会传送给服务器,兼容性好,不会作为路径的一部分发送给服务器,也就是它不会包括在HTTP请求体中,对后端完全没有影响,只是我们前端同学自己玩

页面刷新时,会停留在当前页面,不会重新加载

如果觉得hash路径很丑,不简洁,我们可以用路由的history模式,这种模式充分利用history.pushState API或replaceState,来完成,url跳转而无需重新加载页面

f76b912c9db52813168c572710e0dc27.gif

02

历史模式

history模式:在实例化配置对象中添加mode模式,值为history就可以了的 经过改造后,hash模式就会变成history模式

const router = new VueRouter({
  mode: 'history',
  routes: [...]
})

这两种方式的使用都是没啥问题的,如果你在意浏览器url的颜值,#符号掺杂在url里看起来确实有些不优雅

如果你想url更好看,那么就使用history模式

但是:在hash模式下,使用hash符号之前的内容会被包含在请求体中,#号后面的不会发送给服务器

而history模式下,前端的URL必须和实际向后端发起请求的URL保持一致

如:https://itclan.cn/fontend/id,如果后端缺少没有对/fontend/id的路由处理,那么它将返回404错误

如果你想要支持history模式,那么需要后端同学支持,想要彻底解决404的问题,需要与后端同学协商,因为需要后端与前端路由做匹配

在服务端增加一个覆盖所有情况的时候的候选资源,如果url匹配不到任何静态资源,应该返回一个首页页面

如果出现404,容易让用户觉得这是一个Bug

1a3842d040f66cede63230e3f8ca95ad.gif

03

404问题

如何解决前台刷新页面404问题

解决这个问题:如果你用的是Node做后端服务,那么在Node后台中可以加入一个中间件比如:connect-history-api-fallback即可解决这种404问题

如果是java或php,找后端同学,让后端路由与前端路由做匹配,或是用Ngnix做中间代理

如下这段简易的Node服务代码,可以命名为server.js,同时安装express以及connect-history-api-fallback中间件

启动后端服务执行命令node server.js

const express = require('express');
const history = require('connect-history-api-fallback')

const app = express()
app.use(history())
app.use(express.static(__dirname+'/static'));


app.listen(5005,(err)=> {
  if(!err)consle.log('服务器启动成功了')
})

把前端打包生成的dist文件内的代码,放到static中,通过这一操作,即可解决刷新页面,404的问题

59f70acdff46be1f6fa98fee5d822c08.gif

04

对单页面应用理解

我们的前端使用的vue-router中的两种模式,就是单页面应用,整个应用只有一个router路由器,是可以通过$router属性获取到

也就是说,整个应用只有一个完整的页面,同时,点击页面中的导航链接,不会刷新页面,只会是页面的局部更新

而我们页面中的数据,往往需要通过ajax请求来获取

现在开发的新项目,都是前后端分离,基本上都是单页面应用

总结

前端路由,有两种模式,一种是hash模式,另一种是history模式,其中hash模式是默认模式,#后面的不会发送给服务端,不会重新刷新加载页面,而history模式,url虽然比较好看,但是想要完整支持,需要后端同学提供支持,后端路由与前端的路由需要做匹配

否则部署到线上,一刷新页面,会出现404的问题

vuejs中路由的嵌套

2022-08-03

c36b8bd95d0ad4eb36d118a1fe666424.jpeg

vuejs中全局前置路由守卫-全局后置路由守卫及独享路由守卫-组件内的守卫

2022-07-31

cd033542df01ae592df5a0be6cb17313.jpeg

vuejs中如何实现路由切换及路由的缓存

2022-07-28

0d627e163f1d57e081713a3dd61bd1c4.jpeg

VueJs中的编程式导航VS声明式导航

2022-07-20

fe933f8de9c949efc39633970a9437b5.jpeg

vuejs中路由的传参以及路由props配置

2022-07-17

22c6ce8a136096bff441b092658100f5.jpeg


c93a002fb59cc8c109c63c501601a531.jpeg

点个在看你最好看

aaa8a08467d4bedb02f928e9ec735c83.png

1ed251ab46b427c8c81858af14c053a7.png

dd451cdf657104d1bf3788ee7b2b9c9b.png

点击下方阅读原文可了解更多

【vue-router】---原生js实现两种路由模式 目录 一、hash模式 二、history模式 三、hash模式和history模式的区别 我们在vue中用的路由其实也是用原生的js封装的,本文总结两种路由模式的原生写法,总结两者的实现的原理和区别 Vue两种前端路由(hash模式和history模式)实现原理解析及区别 一、hash模式 hash值变化浏览器不会重新发起请求,但是会触发window.hashChange事件,假如我们在hashChange事件中获取当前的hash值,并根据hash值来修改页面内容,则达到了前端路由的目的 阅读详情

相关推荐

Vue3.0路由模式切换实战:从哈希到历史的完整迁移指南(附常见问题解决)

本文提供了Vue3.0项目从哈希模式迁移到历史模式的完整实战指南。详细阐述了两种路由模式的核心差异、迁移步骤(包括配置修改、构建调整和代码清理),并重点解决了历史模式下的服务器部署适配问题,帮助开发者优化URL结构,提升用户体验与SEO表现。

weixin_29009971的博客 240

VUE的hash路由模式

router-view标签就是确定路由位置的 一般放置在APP.vue文件里 路由位置 vue-router 路由模式分为三种 hash history abstract hash路由就是: 跳转的位置是#加上后面的字符 类似于 可以通过控制台location.hash查看当前hash是多少 ** 路由的使用** 在App中设置 <!-- 用于存放路径的组件--> <router-view></router-view> 然后在router/index.js 中添

qq_35417353的博客 5233

Vue-Router的Hash模式简介与分析

Vue-Router是Vue.js官方推荐的路由管理器,用于构建单页应用程序(SPA)。它允许我们在Vue应用中实现路由功能,从而实现页面之间的无刷新切换。Vue-Router提供了多种路由模式,其中之一是Hash模式。Hash模式是Vue-Router的默认路由模式,它通过URL的哈希(#)来管理路由。当URL的哈希发生变化时,Vue-Router会根据哈希值来匹配对应的路由,并加载相应的组件。

RoGroovy的博客 803

vue-router的两种模式(hash和history)及区别

为什么要有hash 和history? 对于Vue这类渐进式前端开发框架,为了构建SPA(单页面应用),需要引入前端路由系统,这也就是Vue-Router存在的意义。前端路由的核心,就在于——改变试图的同时不会向后端发出请求。 为了达到这一目的,浏览器当前提供了一下两种支持: 1:hash - 即地址栏URL中的 # 符号(此hash不是密码学里的散列运算) 比如这个URL:http://www....

H_c_l的博客 1万+

前端开发:vue-router的使用以及两种模式的区别

前言 在前端开发中,使用Vue做项目的时候关于路由的管理处理是非常重要的知识点,路由的管理也是比较常用的,做前端开发的都知道SPA,通过唯一一个HTML页面完成所有组件的展示和切换,不同组件之间的切换需要通过路由来实现。vue-router是Vue的官方路由插件,为的就是Vue单页面开发的路由,处理页面跳转的,那么本篇博文就来分享一下关于vue-router相关的知识点,该知识点在前端求职面试中也是高频考察知识点,这里总结一下,方便查阅使用。 vue-router概念  router的中文释...

全沾软贱开发攻城狮 1万+

ROS阿克曼小车避坑指南:TEB Local Planner参数调优实战(附完整配置文件)

本文针对ROS阿克曼底盘机器人,提供了TEB Local Planner参数调优的实战指南。文章深入剖析了阿克曼模型与TEB的协同工作原理,重点讲解了`min_turning_radius`、`cmd_angle_instead_rotvel`等关键参数的设置与调试方法,并分享了性能优化、避障行为调整的实用技巧,旨在帮助开发者避开常见陷阱,实现小车在复杂环境中的稳定、高效导航。

ik6789012的博客 500

关于vue-router的历史模式和hash模式

首先了解下 window.location对象 打开浏览器在控制台打印 路由在未交由前端管理之前都是后台控制 你请求不同的路径,后台就甩回不同的html页面回来作为回应。你请求a我就给你a,你请求不存在我就给你个404页面 vue-router就是只改变视图,不请求页面。你看到的是假象。实际上请求的都是index.html。 1、Hash模式: hash(#)是URL...

Army-海军的博客 1万+

关于Arduino中的常用函数

一、I/O函数 二、时间函数 三、数学函数 abs 返回其参数的无符号值 【abs(12)返回12,abs(-12)也返回12】 constrain 限制一个数字以阻止它超出范围。第一个参数是被限制的数字,第二个参数是范围区间的开始,第三个参数是允许的数字范围区间的结尾。 【constrain(8,1,10)返回8,constrain(11,1,10)返回10,constrain(0,1,10)返回1】 map 将一个范围内的数字映射到另一个范围。第一个参数是要映射到数字,第二个和第三个参数是from范围(

TREE的博客 7323

路由器的两种工作模式:hash模式和history模式

路由器的两种工作模式:hash模式和history模式

weixin_66059613的博客 3288

DFT实训教程笔记2(bibili版本)- Scan synthesis practice

文章目录Scan synthesis practice 本博文是博主记录DFT实训教程的笔记版本,此笔记并没有对所有的知识进行记录,仅仅以自身的认知水平,来记录了一些部分笔记并加上了自己的理解。 Scan synthesis practice How to design scan clock structure? 假设一块chip里面有好几十个clock domain,如果每一个clock domain都用一个scan clock虽然会非常清晰,但是IO数目肯定不够用。 clock group: 1、no

ciscomonkey的博客 9082

基于车辆运动学的规划算法 - Hybrid A*/ State Lattice Planning (前置知识:自行车模型、Dubins、Reeds Shepp、多项式曲线、螺旋曲线)

本文将按顺序讲解基于车辆运动学的规划算法,以及需要的前置知识:自行车模型、Dubins和Reeds Shepp曲线、多项式曲线和螺旋曲线

BigDavid123的博客 4859

Vue路由模式有哪几种?Vue两种路由模式的区别

Vue路由模式有哪几种?Vue两种路由模式的区别

weixin_42064877的博客 1262

从PSDK到ROS节点:实战GPS数据发布与CMake配置

本文详细介绍了如何从大疆PSDK获取GPS数据并封装为ROS节点的实战过程,包括PSDK编译、GPS数据订阅、ROS节点实现及CMake配置优化。通过具体代码示例和调试技巧,帮助开发者快速实现无人机传感器数据与ROS系统的集成,提升开发效率。

weixin_30843605的博客 457

Vue的路由实现:hash模式 和 history模式

在 Vue 中,路由的实现通常使用 Vue Router 库。Vue Router 提供了两种路由模式:哈希模式(Hash mode)和历史模式(History mode)。

克里斯蒂亚诺更新的博客 1185

最详细的 SAP ABAP Web Service 创建和消费步骤讲解

本文原版发表于 SAP 官方社区,当时用的英文版写作,标题为:Step by step to create, consume and trace web service in ABAP system https://blogs.sap.com/2014/05/20/step-by-step-to-create-consume-and-trace-web-service-in-abap-system/ 总共阅读量超过 18 万。 How to create web service provider in A

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3151

金融领域强化学习在高频交易中的应用

强化学习(Reinforcement Learning,简称RL)是一种机器学习范式,通过智能体与环境的交互来学习策略,以最大化累计奖励。与监督学习和无监督学习不同,强化学习依赖于动态的反馈机制,智能体通过试错不断优化决策过程。高频交易(High-Frequency Trading,简称HFT)是指在极短时间内进行的大量金融交易,通常利用算法和计算机系统自动执行交易策略。高频交易依赖于高速的数据处理和决策能力,以捕捉市场中的微小价格波动。状态(State):环境在某一时刻的观测,反映了系统的当前情况。

AI天才研究院 891

​不同的历史模式

不同的历史模式# 在创建路由器实例时,history配置允许我们在不同的历史模式中进行选择。 Hash 模式# hash 模式是用createWebHashHistory()创建的: import { createRouter, createWebHashHistory } from 'vue-router' const router = createRouter({ history: createWebHashHistory(), routes: [ //... ],...

m0_52796585的博客 81

目标跟踪与视频时序分析基础

两帧均有目标,却因快速移动导致检测框无重叠,仅靠交并比(IoU)无法维持身份关联。本文通过手算与纯Python实现最小跟踪流程,揭示IoU仅为位置线索,不能应对快速位移或遮挡。实验表明,即使目标真实存在,低重叠也会触发新编号。强调跟踪需结合运动预测、外观特征与阈值验证,避免误判。

Mr数据杨 2335

vue-router H5模式和Hash模式

在创建路由器实例时,history 配置允许我们在不同的历史模式中进行选择。它在内部传递的实际 URL 之前使用了一个哈希字符(#)。由于这部分 URL 从未被发送到服务器,所以它不需要在服务器层面上进行任何特殊处理。不过,它在 SEO 中确实有不好的影响。如果你担心这个问题,可以使用 HTML5 模式。

sunshine的博客 668

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【Vue】Vue2路由

Vue2中的路由

低调做人,低调编码,神码都是浮云 1803

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

vue router导航守卫与不同的历史模式

vue router导航守卫与不同的历史模式。

Linlietao0587的博客 215

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Vue项目路由路径中去掉#

在Vue中,有两种常见的路由模式:哈希模式(Hash Mode)和历史模式(History Mode)。要在Vue项目中选择路由模式,在创建Vue Router实例时,可以通过。

m0_67587248的博客 2566

Vue3 vue-router 编程式导航、命名路由、重定向、历史模式、路由守卫和路由元信息

pathparamsquerynamepath当指定 params 时,可提供 string 或 number 参数(或者对于可重复的参数可提供一个数组)。任何其他类型(如对象、布尔等)都将被自动字符串化。对于可选参数,你可以提供一个空字符串("")或 null 来移除它。由于属性 to 与 router.push 接受的对象种类相同,所以两者的规则完全相同。此外,router.push 和所有其他导航方法都会返回一个 Promise,让我们可以等到导航完成后才知道是成功还是失败。to。

g841805的博客 1957

Vue-router之页面跳转

官方文档见:Vue Router 是Vue.js官方路由。它与 Vue.js 核心深度集成,让用 Vue.js 构建单页应用变得轻而易举。嵌套路由映射动态路由选择模块化、基于组件的路由配置路由参数、查询、通配符展示由 Vue.js 的过渡系统提供的过渡效果细致的导航控制自动激活 CSS 类的链接HTML5 history 模式或 hash 模式可定制的滚动行为URL 的正确编码。

integermain的博客 2079

前端面经-VUE3篇(三)--vue Router(一)基本使用、route和router、动态路由、路由匹配算法、嵌套路由、命名路由、命名视图、重定向与别名、路由组件传参、路由的历史模式

route是“你现在在哪”,router是“你怎么去别的地方”。名称说明$route表示当前“路由信息对象”,包含当前路径、参数、查询等$router表示“路由控制器实例”,用于跳转、返回、导航等行为两个都是 Vue Router 自动挂载到组件实例(即this)上的属性。只在使用选项式 API(非)时有效。很多时候,我们需要将给定匹配模式的路由映射到同一个组件。例如,我们可能有一个User组件,它应该对所有用户进行渲染,但用户 ID 不同。

qq_44643806的博客 1261

手摸手 撸一个 vue3.0 history 模式配合 nginx 多 location 配置

vue router 有 Hash, HTML5 不同的历史模式 官方文档: hash 模式是用 createWebHashHistory() 创建的 import { createRouter, createWebHashHistory } from 'vue-router' const router = createRouter({ history: createWebHashHistory(), routes: [ //... ], }) 它在内部传递的实际 URL 之前

ZhaoQM_script的博客 2267
上一篇: vuejs中路由的嵌套
下一篇: 第7节-如何登录Ecs服务器安装应用软件
itclanCoder
博客等级 码龄10年 1485粉丝 434原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值