【Vue,微信】单页应用到底该用hash模式还是history模式

【前端面经】Vue-Vue Router 路由有哪些模式?各模式有什么区别? 在 abstract 模式下,路由器不会监听 URL 变化,而是通过调用路由器 API 进行导航。该模式的优点是可以在不需要浏览器 API 的情况下使用路由,比如在 Node.js 等非浏览器环境下。但是,由于需要手动管理路由的变化,使用起来比较麻烦,并且不适用于大多数场景。除了路由模式,Vue Router 还提供了很多其他的功能,例如动态路由、路由嵌套、路由守卫等。在使用 Vue Router 时,我们需要根据实际需求来选择合适的功能,以便更好地完成项目的需求。 阅读详情

重要声明:本文章仅仅代表了作者个人对此观点的理解和表述。读者请查阅时持自己的意见进行讨论。

本文更新不及时,请到原地址查看:【Vue,微信】单页应用到底该用hash模式还是history模式。

在前端发展迅速的时代里,一个网站应用由原来的多页面变成了现在的单页面,使用JavaScript技术提供在单页面内实现多页效果切换的单页应用程序,带来了前端模块化开发、便于后期管理维护的同时,也由于单页路由的问题同时催生出了很多其它各种各样的问题。本文就要来讨论一下关于单页面路由模式,到底是使用hash模式好,还是history模式好。

一、URL的格式

我们都知道,使用hash模式和history模式最直观的区别就是 url 上一个有#号,一个没有#号。为了搞清楚#号到底起了一个什么作用,我们先来看看URL格式是什么样的:

这是一个很常见的url,它有着3个部分:

  1. 协议 https
  2. 主机地址
  3. 资源路径

再看下面的URL:

它有所不同,后面通过#号指定了页面里具体的位置。你曾经在学习html的锚点时肯定见过它,是的,当你点击你页面上一个链接,而这个链接不是一个新的页面地址,是一个当前页面内的锚点,这时候你的URL就会变成这样。

一个有效定位资源的URL,其实就是URL的#号前面的内容。

对于URL格式的知识,本文只关注我们遇到的#号,所以只举例2个必要的。现在你知道了这个#号最初是用来干嘛的了,但现在URL里的#号,好像不单单是一个锚点的功能了。下面我们继续讨论。

1、‘#’ 号的用途

#号出现在URL里,它后面的内容表示在这个网页里面某个位置,当你打开一个带#号的页面时,浏览器会自动在页面里寻找id值或name值等于#号后面的内容的地方,并将内容自动滚动到屏幕里。知道这个还不够,同时你还要知道下面这些细节:\

  1. 当发送http请求时如果链接里有#号,浏览器是不会把#号后面的内容带上的,意味着一个:http://*.cn/#name请求实际上请求的是:http://*.cn/。
  2. 当你改变#号后面的内容时,页面是不会触发重新加载的,不过会新增一条访问历史记录。

二、路由模式

现在,我们对URL有了一个基本的了解了,该祭出单页面里面路由的两种模式来进行讨论了。先从hash模式讨论。

1、hash 路由模式

好巧不巧,如果使用hash模式作为我们单页面应用的路由模式,其URL里正好也会有一个**#**号,但我们页内却没有了一个与#号后面对应的dom元素了,取而代之的是我们路由管理器去处理#号后面的内容。通过上一小节的内容,我们可以从中了解到,这个#号为我们带来了这样一些特性:

  1. 切换页面会改变#号后面的内容。
  2. 自动添加浏览器历史记录。
  3. 浏览器并不会重新全部再加载一遍页面。

OHHHHHHHHH!,这样的特性加持,相当于极大的减少了客户端的流量开销,同时还满足了操作习惯,按返回按键可以按历史记录的方式一层一层回退。唯一不好的,你可能认为这个#号怎么看怎么碍眼。

2、history 路由模式

很多前端开发朋友都喜欢这个模式,正如大多数喜欢漂亮的人一样,这种模式下的URL则是一个几乎完美无缺的完整字符串,没有其他特殊字符,强迫症患者表示一切都被治愈了。诚然,它的确为我们带来了心理上不少的安慰。但你又不得不对他严肃起来。

history模式没有了**#**号,这直接受影响的是什么?当然是浏览器,页面是直接与浏览器接触的东西,浏览器发现你的URL是一个完整的字符串,他的任务就是将这个URL的资源下载下来。要小心,浏览器每当检测到你要进行页面跳转的时候,就会去加载其对应的资源,你保不齐新界面的一些公共资源是否是重新又从服务端下载了一遍,还是重复利用了已经下载好了的。为什么保不齐?就是因为history模式没有了#号,浏览器便会重新下载所有需要的资源。而由于没有了#号,下载资源时又会拿你前端的路径去请求这些资源,你必须在后台兼容未找到资源的时候使用默认的index资源,才能保证页面不会404。同时你又要小心,你在跳转过程中,由于是单页面应用,路由代码里可能会主动推送一条历史记录到浏览器,而我们进行的这次跳转也会被浏览器自动检测并加入历史记录,无论怎样,这都导致了我们历史记录栈里面的记录与本身我们的操作顺序并不能完全保证一致。导致了我们如果使用history模式在部分浏览器上表现的十分不满意,偶尔总会出现:跳转页面白屏闪烁、返回时全部退出或返回后还在当前页面、等等这些奇奇怪怪的问题。

为什么大多数单页面框架默认都是使用的hash模式而不是后者呢?权衡利弊,history模式除了没有了#号,反而还要带来一系列体验问题,而这些问题又是来自各种浏览器对单页面history模式的支持不近统一。

三、‘#’ 号带来的问题及解决

你对hash模式的痛恨误绝,想必大多数情况下是来自你在单页面里使用微信js、微信支付时遇到的各种奇葩问题,而当你把路由模式换成history这些问题又会迎刃而解。所以你爱上了history模式,发现它又美观又没问题。如果你真的这样了,那就真是。。。牺牲了用户体验了。

hash模式表示,出现这些问题,这个锅老子不背!为了证明自己的清白,hash模式站了出来,详细的介绍了hash模式下该以什么姿势来正确使用。

1、获取微信用户openid

获取微信openid的流程是符合auth2.0授权标准的,无非就是在我们的页面里打开一个授权页面,用户授权完了又会跳回到我们指定的页面。在这个过程中,有些人就会出现跳转回来的界面(又叫回调界面)并不是我们预期的界面了,甚至出现直接授权的时候就在提示参数错误了。这些问题的根本都不是因为hash模式,而是没有弄清楚或忘记了url添加参数时对特殊字符必须要进行urlEncode操作后才能放在url上。

a、进入授权界面

例如,我们有页面:https://test.microanswer.cn/#/usercenter,进入此界面时,发现没有查找到缓存的openid,需要进行微信openid获取,那我们就在这个界面里写了这样的代码:

// 指定授权完成后还是回到同一个界面。
var REDIRECT_URI = "https://test.microanswer.cn/#/usercenter";
var appId = "******";
window.location.href = 
"https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appId + "&redirect_uri="+ REDIRECT_URI +"&response_type=code&scope=SCOPE&state=STATE#wechat_redirect"

猛地一看,这个代码非常perfect,完美无缺,测试运行,爆出error。首先要明白一点,我们的参数REDIRECT_URI尽管它也是一个链接地址,但此处我们是要把它作为一个参数放在另一个链接地址上,它本质上也是一个字符串,这个字符串中的:、/、#这些字符都属于特殊字符范畴,如果不进行urlEncode转换,那么我们地址里的#号直接切断整个完整有效api,使你的授权直接失败。

所以我们必须要先对参数进行urlEncode,反正urlEncode就对了,修复后就像这样:

// 指定授权完成后还是回到同一个界面。
var REDIRECT_URI = "https://test.microanswer.cn/#/usercenter";
var appId = "******";
window.location.href = 
"https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + encodeURIComponent(appId) + "&redirect_uri="+ encodeURIComponent(REDIRECT_URI) +"&response_type=code&scope=SCOPE&state=STATE#wechat_redirect"

这样才是一个正确的导向授权页面的姿势!这样回调回来也会进入到正确对应的界面。

b、回调页面

当你欣喜若狂,正确的回调到了指定的界面上后,你跟着文档上说的去获取回调传过来的code参数和state参数的时候,你猛的一句:

var code = this.$router.query.code;

结果拿到一个undefind。瞬间懵逼的你最后把回调后的url进行alert才发现,TM回调回来后,链接变成了下面这样:

"https://test.microanswer.cn/?code=weg123ku23frth2355csx&state=STATE#/usercenter";

搞半天参数跑到了#号前面去了,可这是为什么呢?要弄清它是为啥,不妨我们假设授权系统是我们自己开发的,那么下面模仿授权时做的操作:

// 第一步:拿到传递进来的参数,urlDecode解析解出原文
var REDIRECT_URI = decodeURIComponent(getParam('redirect_uri'));
var STATE        = decodeURIComponent(getParam('state'));

// 第二步:发现这个url里面有#号
if (REDIRECT_URI.has("#")) {
    // 由于 # 号前面才是有效资源URL,而后面只是一个定位符,
    // 因此我们但凡看到有#时,只操作#号前面的。
    var arrs = REDIRECT_URI.split("#");
    realUrl = arrs[0];
    urlEnd  = arrs[1];
}

// 第三步:执行用户授权操作
var result = askUser();

// 第四步:产生结果并回调
if (result) {
    // 产生一个code并使用此code回调
    redirct(realUrl + "?code=" + getNewAuthCode() + "&state=" + STATE + "#" + urlEnd);
}

当你读完上面的流程你就会发现,做为一个新的系统,我并不知道对方的系统的逻辑,而对于#号的规范我知道,#号后面的内容我不应该关心也不能去关心,所以只需要处理#号前面的就好了,处理完了最后你#号后面是什么,我还给你怎么样传过来。

现在你明白了,把问题回归我们自己的代码上,当我们发现回调参数在#号前面时也不要难过,你只需要同样通过#号截取前面部分,使用你喜欢的方式把code和state参数解析出来就可以继续业务了。

2、进行微信js的config校验

当你在页面内希望使用微信js提供的方法时,首要前提是要先进行config,而config需要你传递一个url,这个url只需要你的有效资源URL部分就好了,也就是#号前面的内容,通常只需要把window.location.href.split("#")[0]得到的结果传上去就好了,而有些时候,就比如刚刚从获取openid回调过来,#号前面还跟了一大堆参数。都不要慌,一切都在控制范围内,有这些参数就让他有吧,这些参数只是一个参数,在js进行config的时候匹配的是资源路径,才不会管你的参数有与没有,只要你给的资源路径和你微信后台配置的匹配得上,就都会成功。

不过除了这一点需要注意,还有微信js在android平台和ios平台上有不一样的行为偏好,《【微信公众号开发】七、微信JS需要注意的坑》这篇文章详细讲述了这些不同之处,建议你去看看。

3、微信js分享

你以为你顺利通过了config这道关卡就可以高枕无忧的使用微信分享功能了?NO,no。当你在进行微信分享的时候,你可能又会为链接里面的#号而犯愁了,就像个毒瘤一样让你的分享出去的页面不是你希望的界面。这个问题其实不大,如果你都按照上面的步骤一点一点的去实现,到这里也不会有问题。下面是一个典型的分享案例。假如有这个界面https://www.microanswer.cn/#/home要进行分享:

// 假设config已经完成
// 直接进行分享
var url = window.location.href; // 要分享的页面直接就是当前页面,不用担心里面是否有#号,直接一把梭!
wx.onMenuShareAppMessage({
    title: "分享标题",
    desc: "分享描述",
    link: url,
    type: 'link'
});

由于这是直接传递给js方法,所以不需要再进行urlEncode,这样就已经ok了,不会出现你担心的问题。要出问题的那一步是发生在别人点击你分享的出去的消息的那一瞬间。

假设现在真有人点击进来了,而你分享的地址是https://www.microanswer.cn/#/home,当他点击进来的时候,这个url就会立即变成https://www.microanswer.cn/?from=singlemessage#/home这样的格式进入你分享的界面,这其实并没有问题,它多了一个参数只是为了你能够在页面里清楚这是通过什么方式进入的界面,并不会对你产生任何损失。

案例走一下

当你打开的页面是https://www.microanswer.cn/?code=asfe354few1ca3df&state=STATE#/home这样时,进行微信js的config操作使用的url是:https://www.microanswer.cn/?code=asfe354few1ca3df&state=STATE,取#号前面嘛,也不用处理所以就这么长一串。但是放心没有问题,这时候你又要分享了,你使用了这个url:https://www.microanswer.cn/?code=asfe354few1ca3df&state=STATE#/home进行分享。但是code这东西是属于客户个人的,不能分享出去以免出现差错,所以还可以对这个分享出去的url里的参数进行删减,最终删减成这样https://www.microanswer.cn/?state=STATE#/home,然后把这个url传给分享方法,它也是可以分享成功了。有人点击你分享出去的消息进入页面,这时候页面的url是https://www.microanswer.cn/?state=STATE&from=singlemessage#/home,依然也是没有任何问题。

4、微信js发起支付

支付这一块算是安全要求非常高的了,但是hash模式表示我一样能够搞定。要能够发起微信支付,必须要现在微信支付商户后台配置之支付目录,是精确到目录的配置,下面就是配置方式:

  1. 对于页面https://www.microanswer.cn/#/product如果要进行支付,则你应该配置:https://www.microanswer.cn/#/。
  2. 对于页面https://www.microanswer.cn/index.html#/product如果要进行支付,则你应该配置:
    https://www.microanswer.cn/index.html#/。
  3. 如果你的页面里有些url即有index.html,有些又只有一个单独的#,那你就干脆把:
    https://www.microanswer.cn/、https://www.microanswer.cn/#/、https://www.microanswer.cn/index.html#/全部配上去。

配好后,就可以放心的进行支付了。

四、总结

其实各种各样的问题出现并不是hash模式路由导致的,而是对#号在这其中充当了一个什么样的角色,浏览器如何根据#号来处理相应的资源加载。只要开发过程中各项数据参数的传递都严格按照规范协议进行,就并不会出现各种各样的问题。所以最终,使用hash模式,浏览器可以更优雅的调度页内各个资源,用户体验更好,而用户很少关心链接上有没有#号,只是我们开发者自己认为没有#号显得逼格视乎更高,却让浏览器对你的项目识别变得模糊从而失去了更好的用户体验。

Vitis HLS 学习指南与实践教程 Vitis HLS 学习指南与实践教程摘要:本文系统介绍了AMD Vitis HLS工具及其应用。HLS技术将C/C++代码自动转换为硬件描述语言,显著提升FPGA开发效率(5-10倍)。文章对比了HLS与传统RTL设计的优势,包括抽象级别高、开发周期短、代码重用性强等特点。详细讲解了Vitis HLS工具链的核心功能,包括支持的C/C++特性(如任意精度数据类型)、开发流程(项目创建-代码编写-仿真-综合)以及关键优化技术(流水线、循环展开、数组分割等编译指示)。通过具体代码示例展示了HLS设计方法,为F 阅读详情

相关推荐

CrossOver实战:在Mac上流畅运行《梦幻西游》端游与搬砖指南

在跨平台应用开发与系统兼容性领域,如何让为特定操作系统设计的软件在其他平台上运行,是一个经典的技术挑战。其核心原理在于通过兼容层或转译技术,将程序的系统调用和图形接口指令实时转换为目标系统能理解的格式。这项技术的价值在于极大地扩展了硬件设备的软件生态,让用户无需依赖虚拟机或双系统即可无缝使用关键应用。在游戏、专业工具等场景中,这能显著提升工作效率和用户体验。本文以经典端游《梦幻西游》为例,详细解析如何在搭载Apple Silicon或Intel芯片的Mac上,借助CrossOver这一成熟的兼容层方案,构建

weixin_30129025的博客 564

vue-router的两种模式及区别

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

兔子juan的博客 1万+

ANSYS Workbench接触分析实战:从算法选择到收敛难题破解

本文深入解析ANSYS Workbench接触分析的核心技术与实战技巧,涵盖四大接触算法选择、收敛难题破解秘籍及典型场景参数设置。通过实际案例演示如何优化接触刚度、pinball区域和非对称行为等关键参数,帮助工程师有效解决结构非线性问题,提升仿真效率和精度。

weixin_28705087的博客 359

Vue2.x --SPA单页应用hash和history路由模式 、vue-cli打包时采用CDN模式 、instanceof()和typeof()的区别

SPA单页应用两种路由模式–hash模式、history模式 hash模式:(默认模式)url中会有#,#后面是路径. 特点是前端访问,#后面的变化不会经过服务器( 不会向服务器发请求 history模式:正常的访问模式,特点是后端访问,任意地址的变化都会访问服务器 配置history模式路由 //router/index.js const createRouter = () => new Router({ mode:'history', //不写的话默认为hash模式 base:'base'

weixin_51972964的博客 563

Linux系统监控实战:夜莺监控+categraf采集器配置全流程(附常见问题排查)

本文详细介绍了在Linux系统中使用夜莺监控和categraf采集器进行系统监控的全流程配置,包括环境准备、核心配置文件(如config.toml和procstat.toml)详解、服务集成与验证、高级监控配置实战以及常见问题排查。通过实战案例和优化建议,帮助运维人员快速构建高效的监控体系。

xray4的博客 736

【MATLAB-app】系列教程(含视频)第4、5、6课:实战_制作简单的图像处理软件

写作时间: 2020-12-27 我的教程目录 第1课:初步了解appdesigner 第2课:学会制作一个计算器 第3课:学习更多的控件(重点!) 第4课:实例1:制作一个图像处理软件 第5课:学习APPdesigner的设计精髓,框架 第6课:结合使用多种控件,函数等,丰富我们的实例1 第7课:app设计打包,完成工程应用导出 标题: 第4课:我的实例_学会制作一个图像处理软件 本文目录: 1.先看看我之前的一个工程 2.常用的基本组件控件 3.最常用且实用的控件的用法 -3.1 editfilel

wind 4054

详解单页面路由的几种实现原理(附demo)

前言 路由是每个单页面网站必须要有的,所以,理解一下原理,我觉得还是比较重要的。 本篇,基本不会贴代码,只讲原理,代码在页底会有githup地址,主意,一定要放在服务本地服务器里跑(因为有ajax), 希望能帮到你。 众所周知单页面网站的路径跳转全是通过js来控制的,下面咱们来讲讲 第一种:url完全不动型 这一种的情况是url完全不动,即你的页面怎么改变,怎么跳转url都不会改变 ...

weixin_30617561的博客 294

小红书urlscheme和Activity

本文档详细介绍了小红书App的Deeplink跳转规范,涵盖了多个功能模块的跳转协议。主要内容包括:主页各Tab(关注、发现、购买)的跳转方式;不同类型笔记(图文/视频/长笔记)的详情页跳转参数;用户相关页面(主页/绑定/资料/消息等)的跳转协议;搜索功能(输入页/结果页)的跳转方式;以及话题、标签、专辑、H5页面等特殊场景的跳转实现。文档还提供了各跳转协议所需的参数说明,包括参数类型、默认值、是否必填等详细信息,并标注了不同版本和平台的兼容性要求。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 786

最快捷的两种方案彻底解决:vue打包后dist目录下的index.html网页显示空白的问题

📢:解决vue 打包后dist 目录下index.html 页面空白的问题。两种方案快速解决......

AI布道师丨波仔椿 1万+

第01章 Hermes Agent 是什么

如果读者所在的开发团队已经引入了 Cursor、Claude Code 这类 AI IDE,可能会有一个困惑:写代码已经有 AI 帮忙了,还需要 Hermes Agent 做什么?这一章将给出答案。Hermes Agent 不是另一个写代码的 AI,而是一个常驻在团队里的"AI 协作成员",专门负责写代码之外的协作环节——讨论需求、审查代码、查日志、监控告警、生成报告。学完本章,读者将清楚 Hermes 的定位以及它在团队里的角色。

亢少军的博客 75

构建具有预测维护能力的AI Agent

随着工业4.0的推进,工业设备的复杂性和自动化程度不断提高,设备的稳定运行对于企业的生产效率和经济效益至关重要。预测维护作为一种先进的设备维护策略,能够通过对设备状态的实时监测和分析,提前预测设备故障,从而避免设备意外停机,降低维护成本。本文的目的是详细阐述如何构建具有预测维护能力的AI Agent,涵盖从数据采集、处理、模型训练到实际应用的整个流程,为企业和开发者提供全面的技术指导。本文将按照以下结构进行组织:首先介绍核心概念与联系,包括预测维护和AI Agent的基本原理和架构;

2501_92132293的博客 943

Vue2单页应用导致的微信支付安全域名问题

最近vue的单页应用在测试时遇到一个比较严重的问题,在微信内调起微信支付老是报错,排查后发现是安全域名的设置有问题。vue的单页应用有两种模式,hash和history两种,而hash模式下的url是有一个‘#’的,导致唤起微信支付的域名不固定。但是微信的一个商户平台只能添加5个安全域名,如果要把它的多种情况都写入明显是不可能的。而history模式是需要后台去配合的。那怎么单纯的前端去解决呢?//

青岑的博客 4879

【SCADA】KingSCADA将数据插入SQLServer的方法

1、创建数据库及数据表格;2、配置ODBC数据源。3、通过KingSCADA与数据库建立连接,将数据写入数据库对应表格。

做有价值的事,积累有价值的笔记! 4959

Vue 路由知识点归纳总结

最近做项目才发现,我确实对 vue-router 太不熟悉了,都只了解个简单用法就开始搞了,本来很简单的问题,都搞不清楚。现在重新看一遍文档,重新梳理一下。 vue 路由的原理 说实话,路由我一直也就光顾着用,没认真思考过这个问题,还是那次人家面试问了这个,我才反应过来是应该好好的了解一下了。 无刷新跳转页面,是单页应用的一大优势,用户体验好,加载速度快,vue 路由的跳转就是无刷新的,它有两种形...

weixin_33890499的博客 395

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

微信公众号采坑之授权config

  坑: 采用的Vue框架,前后端分离模式(vue工程仅作为客户端),用户通过域名访问的是客户端,但是微信授权中涉及签名和token校验依赖服务端 JS-SDK需要向服务端获取签名,且获取签名中需要的参数包括所在页面的url,但由于单页应用的路由特殊,其中涉及到iOS和android微信客户端浏览器内核的差异性导致的兼容问题 JS-SDK签名(wx.config) 对于签名,官方是这么说的...

果果的博客 5403

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

vue 路由的实现原理分析:hash 模式和 history模式

当匹配到新的路由时,Vue Router 更新内部的路由状态,并通知 Vue 组件进行相应视图的更新。这意味着尽管 URL 更改了,但实际上并没有整个页面刷新,而是局部视图进行了切换,实现了 SPA(Single Page Application,单页面应用程序)的无刷新跳转效果。

大剑师兰特的GIS世界 2146

vue项目的mode:history模式

最近做的Vue + Vue-Router + Webpack +minitUI项目碰到的问题,在此记录一下,Vue-router 中有hash模式和history模式,vue的路由默认是hash模式,一般开发的单页应用的URL都会带有#号的hash模式,因为整个应用本身而言就只有一个HTML,其他的都是通过router来渲染。简单介绍下两种模式: hash —— 即地址栏 URL 中的 # ...

weixin_30826095的博客 1248

vue项目的mode:history模式打包空白

Vue-router 中有hash模式和history模式,vue的路由默认是hash模式,一般开发的单页应用的URL都会带有#号的hash模式,因为整个应用本身而言就只有一个HTML,其他的都是通过router来渲染。简单介绍下两种模式: hash —— 即地址栏 URL 中的 # 符号(此 hash 不是密码学里的散列运算)。比如这个 URL:http://www.abc.com/#/hell...

大大黄的博客 2955

history 改成 模式_vue项目的mode:history模式

最近做的Vue + Vue-Router + Webpack +minitUI项目碰到的问题,在此记录一下,Vue-router 中有hash模式和history模式,vue的路由默认是hash模式,一般开发的单页应用的URL都会带有#号的hash模式,因为整个应用本身而言就只有一个HTML,其他的都是通过router来渲染。简单介绍下两种模式:hash —— 即地址栏 URL 中的 # 符号(此...

weixin_39776817的博客 522

vue路由从hash模式切换到history模式

由于微信登录的限制不得不把hash模式更换为history模式 vue-router 在router.js下增加mode字段,如果部署环境不为根目录,需要添加base属性,填写服务器的路径(.com后路径) home/index为vue-router中路由 打包路径也需要修改为对应的前缀,否则访问不到对应的资源 vue.config.jsz 注意!!!!!!:base值路径两侧必须加 / ...

weixin_45018314的博客 1954

Vue路由History mode模式中页面无法渲染的原因及解决

Vue.js + vue-router 创建单页应用,是非常简单的。使用 Vue.js ,我们将组件(components)映射到路由(routes),然后告诉 vue-router 在哪里渲染它们。一般开发的单页应用的URL都会带有#号的hash模式,因为整个应用本身而言就只有一个HTML,其他的都是通过router来渲染。url带#号会带来很多bug,例如:微信分享和微信支付配置等传的ur

js_admin的博客 5621

vue-router的两种模式

Vue-router 中有hash模式和history模式,vue的路由默认是hash模式,一般开发的单页应用的URL都会带有#号的hash模式,因为整个应用本身而言就只有一个HTML,其他的都是通过router来渲染。简单介绍下两种模式: hash —— 即地址栏 URL 中的 # 符号(此 hash 不是密码学里的散列运算)。比如这个 URL:http://www.abc.com/#/hell...

kgcwuli的博客 601

vue先hash 模式部署项目,然后开启histroy模式 ,引发的几个问题以及histroy模式的开启方式、优点

前言:vue路由有一个HTML5 History 模式,这个模式要在路由里面另外开启的,很多人在刚使用路由的时候之前不知道这个模式,所以并没有启用,然后就把项目部署上去了,因为这个模式还是有挺多优点的,最后还是会开启这个模式。然而因为之前使用hash模式再改为histroy模式还是有些问题的,我已经踩过坑了,然后把这几个问题写出来。有需要的朋友可以做一下参考,喜欢的可以点波赞,或者关注一下,希望可以

OBKoro1前端分享 3109

spa(单页应用)中,使用history模式时,微信长按识别二维码在ios下失效的问题...

spa(单页应用,vue)中,使用history模式时,微信长按识别二维码在ios下失效的问题。 触发条件: spa单页应用; 路由模式 history 从其他页面跳转到带有微信二维码识别的页面(不是直接打开该页面) ios版本的微信(实测版本6.5.19) 结果: 二维码长按无法识别,刷新页面后恢复正常,安卓下正常。 解决方案: 1. 进入该页面的方式不使用路...

weixin_30399055的博客 379

vue-router的理解(模式、单页面应用等概念的解释)

什么是路由?去美女家修一晚上路由器那个路由吗? 路由的作用就是我的页面变了,但其实我没向后端发请求(个人理解) 太长不看版(转载自站内Army-海军 原链接 https://blog.youkuaiyun.com/weixin_41229588/article/details/105365252) 看下 window.location对象 打开浏览器在控制台打印 路由在未交由前端管理之前都是后台控制 你请求不同的路径,后台就甩回不同的html页面回来作为回应。你请求a我就给你a,你请求不存在我就给你个404页面 .

ybyshezhang的博客 1052

Vue history 路由模式微信自定义分享总结

因为之前一直使用的是 hash 模式,所以配置微信分享比较简单,不管是 Android 还是 iOS,只需要获取一次签名即可,然后在需要配置分享的页面在 wx.ready 的回调中编写分享的逻辑即可。 原来一直用 hash 模式都没什么问题,可能是最近微信升级之后,在 Android 端微信授权后重定向回来页面并不会刷新,导致我无法获取用户的授权信息。尝试了很久之后将路由改成 history 模式...

weixin_33853827的博客 227
上一篇: 解决layui的table组件data-content未转义导致的注入问题。
下一篇: 【web】Session是什么又和cookie有啥关系
Microanswer
博客等级 码龄10年 38粉丝 40原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值