Vue Router 路由hash和history模式

文章目录

  • hash和history模式区别
  • Hash 模式
  • History 模式

在 Vue 中,路由的两种主要模式是 hashhistory,默认的路由模式是hash模式。。这两种模式决定了 URL 的外观以及浏览器如何处理 URL 的变化。


hash和history模式区别

特性Hash 模式History 模式
URL 表现形式URL 中带有 # 符号,如 http://example.com/#/aboutURL 看起来更干净,没有 # 符号,如 http://example.com/about
服务器配置不需要特殊的服务器配置需要服务器配置以支持客户端路由,返回 index.html
兼容性所有现代浏览器都支持大多数现代浏览器都支持,但在一些较旧的浏览器或特殊环境中可能不支持
美观度URL 中带有 # 符号可能看起来不太美观URL 看起来更干净,没有额外的符号
SEO# 后面的内容不会被搜索引擎视为页面的一部分与常规页面一样,可以被搜索引擎索引
书签书签中的 URL 会包含 # 符号书签中的 URL 更简洁
刷新页面刷新页面时,通常能够保持当前路由状态如果没有正确的服务器配置,刷新页面可能会返回 404 错误
浏览器前进/后退按钮正常工作正常工作
配置方式Vue Router 默认使用 Hash 模式需要在创建 Vue Router 实例时明确指定 mode: 'history'

Hash 模式

hash值会出现在URL里面,但是不会出现在HTTP请求中,对后端完全没有影响。所以改变hash值,不会重新加载页面。这种模式的浏览器支持度很好,低版本的IE浏览器也支持这种模式。hash路由被称为是前端路由,已经成为SPA(单页面应用)的标配。

特点:

  • URL 中会带有一个 # 号,例如 http://example.com/#/home
  • 浏览器不会将带有 # 及其后面的部分发送到服务器请求资源
  • 仅改变 # 后面的部分,不会重新加载页面
  • 兼容性较好,所有现代浏览器都支持

切换到hash模式:

  • Vue2.x中:

    const router = new VueRouter({mode: 'hash',routes
    })
    
  • Vue3.x中:

    const router = createRouter({history: createWebHashHistory(),routes
    });
    

hash模式的主要原理就是onhashchange()事件:

window.onhashchange = function(event){console.log(event.oldURL, event.newURL);let hash = location.hash.slice(1);
}

使用onhashchange()事件的好处就是,在页面的hash值发生变化时,无需向后端发起请求,window就可以监听事件的改变,并按规则加载相应的代码。

除此之外,hash值变化对应的URL都会被浏览器记录下来,这样浏览器就能实现页面的前进和后退。虽然是没有请求后端服务器,但是页面的hash值和对应的URL关联起来了。


History 模式

history模式的URL中没有#,它使用的是传统的路由分发模式,即用户在输入一个URL时,服务器会接收这个请求,并解析这个URL,然后做出相应的逻辑处理。

虽然history模式丢弃了丑陋的#。但是,它也有自己的缺点,就是在刷新页面的时候,如果没有相应的路由或资源,就会刷出404来。

特点:

  • URL 看起来更加“干净”,没有 # 号,例如 http://example.com/home
  • 浏览器会将 URL 的变化当作一个普通的页面跳转,可能会向后端服务器发起请求
  • 需要后端进行配置,以便对所有路由都返回同一个页面(通常是 index.html),否则就会404
  • 兼容性相对较差,IE9 以下不支持

切换到history模式:

  • Vue2.x中:

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

    const router = createRouter({history: createWebHistory(),routes
    });
    

后端配置:

当使用 history 模式时,需要确保后端服务器对所有路由都返回同一个页面(通常是 index.html)。
以下是一个 Nginx 的配置示例:

location / {  try_files $uri $uri/ /index.html;  
}

这个配置告诉 Nginx,如果请求的文件或目录不存在($uri 和 $uri/ 都不匹配),就返回 index.html。
这样,无论用户访问哪个 URL,都会返回 Vue 应用的入口文件,然后由 Vue Router 接管后续的路由处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/8645.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简单负载均衡

题目描述 某工程师为了解决服务器负载过高的问题,决定使用多个服务器来分担请求消息。 现给定 k 台服务器(编号从 1 到 k),以及一批请求消息的信息,格式为到达时刻 负载大小,消息说明: 每个时刻…

SQL查询语句(四)模糊查询

前文介绍的查询语句,无论是利用常规的数学运算符,还是IN,BETWEEN和EXISTS等范围查询关键字,本质上都属于精确查询的范围,也就是说,我们在条件中写明了完全限定死的条件。而有些场景,我们的条件并…

2024OD机试卷-堆内存申请 (java\python\c++)

题目:堆内存申请 题目描述 有一个总空间为100字节的堆,现要从中新申请一块内存, 内存分配 原则为:优先紧接着前一块已使用内存,分配空间足够且最接近申请大小的空闲内存。 输入描述 第1行是1个整数,表示期望申请的内存字节数 第2到第N行是用空格分割的两个整数,表示…

安全继电器的使用和作用

目录 一、什么是安全继电器 二、安全继电器的接线方式 三、注意事项 四、总结 一、什么是安全继电器 安全继电器是由多个继电器与硬件电路组合而成的一种模块,是一种电路组成单元,其目的是要提高安全因素。完整点说,应该叫成安全继电器模…

【JavaEE网络】HTTP响应详解:状态码、报头与正文的全面解析

目录 HTTP响应(Response)认识 "状态码" (status code)认识响应 “报头”(header)认识响应 “正文”(body) HTTP响应(Response) 响应: 首行响应头空行正文 认…

LeetCode题目113:多种算法实现 路径总和ll

题目描述 给你一个二叉树和一个目标和 targetSum,找出所有从根节点到叶子节点路径总和等于给定目标和的路径。 示例 示例 输入: 5/ \4 8/ / \ 11 13 4 / \ / \ 7 2 5 1目标和 targetSum 22 输出:[[5,4,11,2], [5,8,4…

【线性代数】俗说矩阵听课笔记

基础解系的概念 31线性相关&#xff0c;线性无关&#xff0c;拓展与证明 n个m维向量在n<m时可能线性相关也可能线性无关&#xff0c;线性无关时可以构成某个m维空间的一组基。m不小于n时&#xff0c;秩小于n则线性相关。 n个m维向量在n>m时可一定线性相关。低维向量一定…

第八届大数据与物联网国际会议(BDIOT 2024)即将召开!

第八届大数据与物联网国际会议(BDIOT 2024)将于2024年9月14-16日在澳门圣若瑟大学举行。数聚未来&#xff0c;物联世界&#xff01;BDIOT 2024旨在搭建为各位与会代表展示自己研究成果、分享经验、建立联系和开展合作的平台&#xff0c;共同探讨大数据与物联网领域的未来发展方…

贪心算法(活动选择、分数背包问题)

一、贪心算法 贪心算法是指&#xff1a;在对问题求解时&#xff0c;总是做出在当前看来是最好的选择&#xff0c;而不从整体最优考虑&#xff0c;做出的仅是在某种意义上的局部最优解。 …

不可逆加密算法、可逆加密算法

一、不可逆加密算法 不可逆加密算法&#xff0c;也称为哈希算法或单向加密算法&#xff0c;其最大的特点是在加密过程中不需要使用密钥&#xff0c;且加密后的数据无法被解密回原文。这种算法通过算法的结构&#xff0c;使得密文无法解密成明文。常见的不可逆加密算法有MD5、SH…

token无感刷新

token无感刷新长token过期处理当短token过期之后&#xff0c;需要刷新token&#xff0c;但是进来了很多请求&#xff0c;不需要每个请求都去刷新token处理 所用技术栈&#xff1a;Vue3TSVitearco-design 1.模拟页面&#xff0c;进行登录和数据请求 <template><div …

Dockerfile实践java项目

目的&#xff1a;用java项目测试dockerfil部署&#xff08;前提是安装好了docker&#xff09; 部署准备文件如下 1. java项目 java项目demo地址 https://gitee.com/xiaoqu_12/dockerfileDemo.git 或者百度网盘直接下载打包好的jar包 链接&#xff1a;https://pan.baidu.com/s/…

解决windows中的WS Llinux子系统(unbantu2204)访问网络失败问题?

一、问题描述 unbantu先前可以正常访问网络&#xff0c;后面用着用着发现上不了网了&#xff0c; 出现如下异常 Hmm. We’re having trouble finding that site.We can’t connect to the server at www.iqiyi.com.If you entered the right address, you can:Try again late…

C#winfrom三层架构实现简单课程管理系统管理系统,三层架构实现增删改查

1. 项目展示 1.1登录展示 1.2添加课程信息展示 1.3课程信息管理-查询-修改-删除 1.4修改登录密码 2.项目功能介绍&#xff08;图&#xff09; 3.数据库设计 3.1 教师表设计 3.2 课程分类表 3.3 课程信息表 4. 创建样式界面 winfrom 超详细UI创建过程 实现双色球选号器UI界面…

回传方案笔记

项目涉及业务系统交互&#xff0c;需要用到回传&#xff0c;饱受折磨后&#xff0c;决定整理一下。 简述 回传不是一个方法&#xff0c;或一个功能。虽然说是功能也没错&#xff0c;但是个复杂的功能或是一套机制更合适。 首先&#xff0c;不只是落库的数据需要回传&#xf…

刷题笔记 - 滑动窗口

文章目录 滑动窗口最长无重复子串最小覆盖子串串联所有单词的子串长度最小的子数组滑动窗口最大值字符串的排列最小区间 滑动窗口 所有题目来自leetcode的回答&#xff1a;https://leetcode.cn/problems/longest-substring-without-repeating-characters/solutions/3982/hua-d…

【算法】滑动窗口——将x减到0的最小操作数

本节博客主要是讲的我解“将x减到0的最小操作数”这道题的思路历程&#xff0c;从最开始的想法到代码提交的详细记录&#xff0c;有需要借鉴即可。 目录 1.题目2.代码示例3.细节3.1left越界3.2特殊情况 4.总结 1.题目 题目链接&#xff1a;LINK 看题目意思是就是给你一个数X&…

uni-app 安装 uni-app-fetch 进行接口请求的封装

1、在 uni-app 中通过 uni.request 发起网络请求&#xff0c;在实际的应用中需要结合一些业务场景进行二次封装&#xff0c;比如配置 baseURL、拦截器等&#xff0c; 1、uni-app-fetch 是对 uni.request 的封装&#xff0c;通过 npm 来安装该模块 # 安装 uni-app-fetch 模块 …

04.化栈为队

刷算法题&#xff1a; 第一遍&#xff1a;1.看5分钟&#xff0c;没思路看题解 2.通过题解改进自己的解法&#xff0c;并且要写每行的注释以及自己的思路。 3.思考自己做到了题解的哪一步&#xff0c;下次怎么才能做对(总结方法) 4.整理到自己的自媒体平台。 5.再刷重复的类…

MySQL LRU算法(冷热数据分离)

背景 MySQL中使用的InnoDB存储引擎采用了一种特别的最近最少使用&#xff08;LRU, Least Recently Used&#xff09;算法来管理其Buffer Pool中的页&#xff08;包括数据页和索引页&#xff09;。Buffer Pool是InnoDB用来缓存数据&#xff0c;以减少磁盘I/O操作的内存区域。正…