改变路由不刷新页面

本文详细介绍了HTML5 History API中的pushState和replaceState方法,包括它们的参数、作用以及区别。pushState允许在不加载页面的情况下改变URL并创建历史记录,而replaceState则用于替换当前的历史记录条目。这两个方法在前端路由和无刷新页面更新中非常有用,可以提升用户体验。同时,文章提到了状态对象的序列化限制和浏览器的兼容性问题。
摘要由CSDN通过智能技术生成

语法

pushState

history.pushState(state, title[, url])
参数
state
状态对象是一个JavaScript对象,它与pushState()创建的新历史记录条目相关联。 每当用户导航到新状态时,都会触发popstate事件,并且该事件的状态属性包含历史记录条目的状态对象的副本。
状态对象可以是任何可以序列化的对象。 因为Firefox将状态对象保存到用户的磁盘上,以便用户重新启动浏览器后可以将其还原,所以我们对状态对象的序列化表示施加了640k个字符的大小限制。 如果将序列化表示形式大于此状态的状态对象传递给pushState(),则该方法将引发异常。 如果您需要更多空间,建议您使用 sessionStorage或者localStorage。
title
当前大多数浏览器都忽略此参数,尽管将来可能会使用它。 在此处传递空字符串应该可以防止将来对方法的更改。 或者,您可以为要移动的州传递简短的标题。
url 可选
新历史记录条目的URL由此参数指定。 请注意,浏览器不会在调用pushState() 之后尝试加载此URL,但可能会稍后尝试加载URL,例如在用户重新启动浏览器之后。 新的URL不必是绝对的。 如果是相对的,则相对于当前URL进行解析。 新网址必须与当前网址相同 origin; 否则,pushState()将引发异常。 如果未指定此参数,则将其设置为文档的当前URL。

描述
从某种程度来说, 调用 pushState() 和 window.location = "#foo"基本上一样, 他们都会在当前的document中创建和激活一个新的历史记录。但是 pushState() 有以下优势:

新的URL可以是任何和当前URL同源的URL。但是设置 window.location 只会在你只设置锚的时候才会使当前的URL。
非强制修改URL。相反,设置 window.location = “#foo”; 仅仅会在锚的值不是#foo情况下创建一条新的历史记录。
可以在新的历史记录中关联任何数据。window.location = "#foo"形式的操作,你只可以将所需数据写入锚的字符串中。
注意: pushState() 不会造成 hashchange 事件调用, 即使新的URL和之前的URL只是锚的数据不同。

示例
以下代码通过设置state, title和url创建一条新的历史记录。
const state = { ‘page_id’: 1, ‘user_id’: 5 }
const title = ‘’
const url = ‘hello-world.html’
history.pushState(state, title, url)

replaceState

history.replaceState(stateObj, title[, url]);
参数
诺索比
[雅瓦脚本],[]replaceState
标题
[],在此处传递空字符串应该可以防止将来对方法的更改。或者,您可以为该状态传递简短标题
Url可选
[杜尔。[乌尔];[替换状态] 。

实例
[http://mozilla.org/foo.html] Javascript ] :

var stateObj = { foo: “bar” };
history.pushState(stateObj, “”, “bar.html”);
“推州()法的例子”[http://mozilla.org/bar.html] JavaScript ] :

history.replaceState(stateObj, “”, “bar2.html”);
[http://mozilla.org/bar2.html][2.html]bar2.html

[http://www.microsoft.com],[.],URL[http://mozilla.org/bar2.html],URL[http://mozilla.org/foo.html],[bar.html] 。

Vue的路由切换页面不刷新是由于Vue采用了单页应用(Single Page Application, SPA)的开发模式。单页应用是指只有一个HTML页面的应用,通过动态的改变页面的内容来实现不同的页面展示效果,而不是每次刷新整个页面。 在传统的多页应用中,每次页面切换都会发起一个新的http请求,然后服务器返回一个完整的HTML页面,页面刷新就是浏览器通过加载新的HTML页面来实现的。 而在Vue的单页应用中,浏览器在加载页面时会先加载一个index.html文件,然后通过使用Vue的路由机制,在不刷新页面的情况下改变URL路径,并借助Vue的内部机制来动态更新页面内容。这意味着整个页面只有一个HTML文件,所有的数据交互和页面变化都通过JavaScript来完成。 因此,当Vue的路由切换时,页面不刷新的原因是因为只是改变了URL路径,并没有重新加载整个页面。Vue使用了虚拟DOM(Virtual DOM)的概念,在切换路由时,通过监测数据的改变,重新构建虚拟DOM,并与原始的虚拟DOM进行插入、删除、更新等操作,从而只更新需要变化的部分,提高了页面的性能和体验。 这样的设计模式可以带来许多好处,如减少网络请求、提高页面加载速度、提升用户体验等。但也需要注意,在一些特殊情况下,比如页面切换后需要重新加载数据,我们需要手动控制页面的刷新。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值