

Vue2中Hash和History路由模式的深入解析
source link: https://blog.51cto.com/u_15723831/9982583
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

路由有两种模式:一种是 hash
模式、另一种是 history
模式,在使用 vue-cli
以及 vue-router
默认搭建的 Vue
项目,若不做特殊的配置,默认就是 hash
模式。
1# 哈希模式
vue-router
默认为 hash
模式,使用 URL 的 hash
值来模拟一个完整的 URL,当 URL 改变时,页面不会重新加载。
hash 路由模式是这样的:http://www.example.com/#/xx
。 #
号后面就是 hash
值,改变后面的 hash
值,它不会向服务器发出请求,因此也就不会刷新页面。并且每次 hash
值发生改变的时候,会触发 hashchange
事件。
windows.addEventListener('hashchange', () => {
console.log(window.location.hash); // 打印 hash 值
})
2# 历史模式
在 vue-router
实例化配置对象中添加mode: history
便会由 hash
模式变为 histroy
模式。
const router = new VueRouter({
mode: 'history',
routes: [xxx]
})
history 路由模式是这样的:http://www.example.com/xxx
,不带 #
号。
2.1 pushState() 与 replaceState()
vue-router
会通过 history.pushState()
方法或 history.replaceState()
方法来改变 URL 的路径部分,而不刷新页面。
pushState()
方法用于在历史中添加一条记录,该方法不会触发页面刷新,只是导致 History 对象发生变化,地址栏会有变化。
语法:history.pushState(stateObject, title, url)
stateObject
:传递到新页面的数据对象。如果不需要传递数据,可以传入 null。title
:指定标题,但大多数浏览器并不使用这个参数,所以通常可以传入空字符串。url
:新的网址,必须与当前页面处在同一个域。如果不指定,则默认为当前路径。如果设置了一个跨域网址,则会报错。
注意: 如果
pushState
的 url 参数设置了一个新的锚点值(即 hash 值),并不会触发 hashchange 事件。 反过来,如果 URL 的锚点值变了,则会在 History 对象创建一条浏览记录。
replaceState()
方法用来修改 History 对象中的当前记录,用法与 pushState()
方法一样。
语法:history.replaceState(stateObject, title, url)
stateObject
:传递到新页面的数据对象。如果不需要传递数据,可以传入 null。title
:指定标题,但大多数浏览器并不使用这个参数,所以通常可以传入空字符串。url
:新的网址,必须与当前页面处在同一个域。如果不指定,则默认为当前路径。如果设置了一个跨域网址,则会报错。
history.pushState({data: 1}, '', '?page=1')
// URL 显示为 http://www.example.com/index.html?page=1
history.pushState({data: 2}, '', '?page=2');
// URL 显示为 http://www.example.com/index.html?page=2
history.replaceState({data: 3}, '', '?page=3');
// URL 显示为 http://www.example.com/index.html?page=3
history.pushState(null, '', 'https://www.xxx.com/index.html');
// 会报错
2.2 popstate 事件
每当 history 对象出现变化时,就会触发 popstate
事件,仅仅调用 pushState()
方法或 replaceState()
方法 ,并不会触发该事件。只有用户点击浏览器倒退按钮和前进按钮,或者调用History.back()
、History.forward()
、History.go()
方法时才会触发该事件。另外,该事件只针对同一个文档,如果浏览历史的切换,导致加载不同的文档,该事件也不会触发。
注意:页面第一次加载的时候,浏览器不会触发 popstate 事件。
使用的时候,可以为 popstate
事件指定回调函数,它的参数是一个 event
事件对象,其 state
属性指向当前的 state
对象,相当于 history.state
对象。
window.addEventListener('popstate', function (e) {
console.log(e.state);// 相当于 history.state
console.log(history.state);
})
学习项目: 点此下载
Recommend
-
133
本文重点讲述Vue2渲染的整体流程,包括数据响应的实现(双向绑定)、模板编译、virtual dom原理等,希望读者看完有所收获。 博客同步原文链接:imhjm.com/article/59b… 前言 此部分内容初步介绍前端主流框架部分特点,来提高大家对框架
-
86
Vue是一款高度封装的、开箱即用的、一栈式的前端框架,既可以结合webpack进行编译式前端开发,也适用基于gulp、grunt等自动化工具直接挂载至全局window使用。本文成文于Vue2.4.x版本发布之初,笔者生产环境当前使用的最新版本为2.5.2。在经历多个前端重度交互项目...
-
52
现代前端项目多为单页Web应用(SPA),在单页Web应用中路由是其中的重要环节。 SPA 是 single page web application 的简称,译为单页Web应用。 简单的说 SPA 就是一个WEB项目只有一个 HTML 页面,一旦页面加载完成,SPA...
-
27
JS逆向- MD5 HASH 案例解析汇总(一) 2020-07-16 | 2020-09-24 ...
-
12
阅读目录: 1.开篇介绍 2.ASP.NET Routing 路由对象模型的位置 3.ASP.NET Routing 路由对象模型的入口 4.ASP.NET Routing 路由对象模型的内部结构 4.1UrlRoutingModule 对象内部结构 4.2RouteBase、Ro...
-
6
Kubernetes网络技术解析之Pod基于路由模式的通信实现 ...
-
15
8.深入TiDB:解析Hash Join实现原理 Posted on 2021年12月5日2021年12月5日 by luozhiyun 本文基于 TiDB release-5.1进行分析,需...
-
10
在了解路由模式前,我们先看下 什么是单页面应用,vue-router 的实现原理是怎样的,这样更容易理解路由。 SPA与前端路由 SPA(单页面应用,全程为:Single-page Web applications)指的是只有一张Web页面的应用,是加载单个HTML 页面并在用户与应用...
-
8
Vue history 模式下路由刷新 404今天在用 vue 重写
-
7
vue.js是一种流行的JavaScript框架,用于构建交互式Web应用程序。Vue-router是Vue.js框架中的一个重要组件,它允许您为...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK