vue-router中hash模式与history模式的区别

143 阅读2分钟
一、vue-router是什么

vue-router就是WebApp的链接路径管理系统。vue的单页面应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来。传统的页面应用,是用一些超链接来实现页面切换和跳转的。在vue-router单页面应用中,则是路径之间的切换,也就是组件的切换。路由模块的本质 就是建立起url和页面之间的映射关系

二、hash模式的特点

hash表示的是地址栏URL中#符号(也称作为锚点), hash虽然会出现在URL中, 但是不会被包含在Http请求中, 因此hash值改变不会重新加载页面.

由于hash值变化不会引起浏览器向服务器发出请求, 而且hash改变会触发hashchange事件, 浏览器的进后退也能对其进行控制, 所以在HTML5之前, 基本都是使用hash来实现前端路由.

const router = createRouter({
    history: createWebHashHistory(), //hash模式
    routes, // short for `routes: routes
})

三、history模式的特点

利用了HTML5新增的pushState()replaceState()两个api, 通过这两个api完成URL跳转不会重新加载页面

同时history模式解决了hash模式存在的问题. hash的传参是基于URL的, 如果要传递复杂的数据, 会有体积限制, 而history模式不仅可以在URL里传参, 也可以将数据存放到一个特定的对象中

const router = createRouter({
    history: createWebHistory(), //history模式
    routes, // short for `routes: routes
})

总结

1 hash 模式下,仅 hash 符号之前的内容会被包含在请求中

2 history 模式下,前端的 URL 必须和实际向后端发起请求的 URL 一致

3 结合自身例子,对于一般的 Vue + Vue-Router + Webpack + XXX 形式的 Web 开发场景,用 history 模式即可,只需在后端(Apache 或 Nginx)进行简单的路由配置,同时搭配前端路由的 404 页面支持

我的个人博客hyyyh.top