Vue 路由实现原理

发布于 2021-11-28 21:09:57 字数 1619 浏览 988 评论 0

结果:通过更改url地址来更新视图,但是不重新请求页面。

实现:浏览器环境两种(hash 和 history),node 环境一种(abstract)。

hash

hash("#") 的作用是加载 URL 中指示网页中的位置。# 本身以及它后面的字符称为 hash,可通过 window.location.hash 获取。hash 不会在 http 请求中,对服务端无用,只是用来指导浏览器动作的。所以改变 hash 不会重新加载页面。而且 hash 的改变可以通过 hashchange 事件进行监听。HashHistory 拥有两个方法,一个是 push(将新路由放到浏览历史栈顶), 一个是 replace(新路由替代当前路由)

$router.push() //调用方法
HashHistory.push() //根据hash模式调用,设置hash并添加到浏览器历史记录(添加到栈顶)(window.location.hash= XXX)
History.transitionTo() //监测更新,更新则调用History.updateRoute()
History.updateRoute() //更新路由
{app._route= route} //替换当前app路由
vm.render() //更新视图

history

从 HTML5 开始,History interface 提供了 2 个新的方法:pushState()、replaceState() 使得我们可以对浏览器历史记录栈进行修改,通过 back()、forward()、go() 等方法,我们可以读取浏览器历史记录栈的信息,进行各种跳转操作。

  • stateObject:当浏览器跳转到新的状态时,将触发 Popstate 事件,该事件将携带这个 stateObject 参数的副本
  • title:所添加记录的标题。
  • url:所添加记录的 url。

这2个方法有个共同的特点:当调用他们修改浏览器历史栈后,虽然 url 改变了,但浏览器不会立即发送请求该 url,这就为单页应用前端路由,更新视图但不重新请求页面提供了基础。

window.history.pushState(stateObject,title,url)
window.history.replaceState(stateObject,title,url)

与 hash 模式做比较:

1.push

只是将 window.hash 改为 history.pushState

2.replace

只是将 window.replace 改为 history.replaceState

3.监听地址变化

在 HTML5History 的构造函数中监听 popState(window.onpopstate) 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84960 人气
更多

推荐作者

lorenzathorton8

文章 0 评论 0

Zero

文章 0 评论 0

萧瑟寒风

文章 0 评论 0

mylayout

文章 0 评论 0

tkewei

文章 0 评论 0

17818769742

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文