Vue Router路由hash模式与history模式详细介绍

 更新时间:2022年08月31日 15:07:39   作者:小绵杨Yancy  
Vue Router是Vue.js官方的路由管理器。它和Vue.js的核心深度集成,让构建单页面应用变得易如反掌。路由实际上就是可以理解为指向,就是我在页面上点击一个按钮需要跳转到对应的页面,这就是路由跳转

一、前言

对于hash模式和history模式,最直接的区别就是地址栏带不带"#"号了。

vue脚手架搭建的项目的路由默认是hash模式。

hash模式:

创建路由实例时,添加mode:"history"属性,即可使用history模式。

const router = new VueRouter({
  routes,
  mode: "history"
})

history模式:

二、hash模式

最开始学习超链接a时,就可以利用锚点”#”实现跳转到同一页面的不同id所对应的位置。我们知道vue是单页面应用,所以很符号使用锚点实现路由。

打开vue官网,点击 “vuejs是什么目录”:

可以看到地址栏,是带#的,所以是hash模式:

打开控制台,输入window.location(包含了浏览器地址栏的地址信息):

路由的哈希模式其实是利用了window.onhashchange事件,也就是哈希值(#后面的值)如果有变化,就会自动调用hashchange的监听事件,在hashchange的监听事件内可以得到改变后的url,这样能够找到对应页面进行加载。

三、history模式

使用hash模式完全可以实现路由的功能,但是,地址栏带"#号",让人感觉不太正常。而且有的时候分享页面到某些app时,有的app里面url是不允许带有#号的。所以需要使用history模式,去掉“#号”。

前面知道了hash模式是观察window.location.hash的变化来改变路由的。

而HTML5 History Interface 中新增的两个神器 pushState()replaceState() 方法(需要特定浏览器支持),用来完成 URL 跳转而无须重新加载页面。

每个window窗口都有持有自己的history,为了安全起见history不会暴露访问过的URL,但是可以通过API进行前进或后退访问URL的内容

1、 window.history.pushState(data, title, targetURL);

@状态对象:传给目标路由的信息,可为空

@页面标题:目前所有浏览器都不支持,填空字符串即可

@可选url:目标url,不会检查url是否存在,且不能跨域。如不传该项,即给当前url添加data

2、window.history.replaceState(data, title, targetURL);@类似于pushState,但是会直接替换掉当前url,而不会在history中留下记录。

3、popstate事件,回退,与pushState作用相反。

通俗地说就是浏览器的地址栏url信息存储在了window.history.state中,但是调试时我们发现,其为null,是为了防止网页获取你的历史浏览地址,所以给隐藏了,但是其内部可以获取。

举一个例子,立马就明白了:

打开百度,搜索“CSDN”:

然后我们打开控制台,输入:

window.history.replaceState(null, 'title', 'https://www.baidu.com/')

效果:

地址栏变成了百度首页的地址,但是并不影响当前页面的内容。这也就是history模式下vue单页面实现不同路由显示的原理,程序中路由改变时,将路由地址显示在地址栏,然后根据路由对应的地址显示组件就行了,此时并没有重新请求服务器,但是地址栏确改变了,给用户造成了页面跳转的假象。然而,我们知道,vue项目中,我们一直都在index.html中。

但是,同时也暴露了history一个问题,就如上面的例子,如果我将地址栏替换为"https://www.baidu.com/"后,刷新页面,肯定会跳转到百度首页的,因为刷新会重新请求服务器的。然而实际应用中,vue中的路由地址并没有在服务器上有对应的后端处理,它仅仅用于前端的路由切换。

那么如何解决呢?这就需要服务器端做点手脚,将不存在的路径请求重定向到入口文件(index.html)。

所以相比于hash,history虽然可以实现正常美观的地址显示,但是代价就是需要解决刷新时请求服务器的404的问题。

到此这篇关于Vue Router路由hash模式与history模式详细介绍的文章就介绍到这了,更多相关Vue hash history内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解Vue3中对VDOM的改进

    详解Vue3中对VDOM的改进

    这篇文章主要介绍了详解Vue3中对VDOM的改进,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • element-ui自定义message-box自定义样式不生效的解决

    element-ui自定义message-box自定义样式不生效的解决

    这篇文章主要介绍了element-ui自定义message-box自定义样式不生效的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • vue-router之路由钩子函数应用小结

    vue-router之路由钩子函数应用小结

    vue-router提供的导航钩子主要用来拦截导航,让它完成跳转或取消,本文主要介绍了vue-router之路由钩子函数应用小结,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • Vue.js获取手机系统型号、版本、浏览器类型的示例代码

    Vue.js获取手机系统型号、版本、浏览器类型的示例代码

    这篇文章主要介绍了vue js获取手机系统型号、版本、浏览器类型的示例代码,代码简单易懂,非常不错具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • Vue非父子组件通信详解

    Vue非父子组件通信详解

    这篇文章主要为大家详细介绍了Vue非父子组件通信的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • vue this.$toast 失效问题解决方案

    vue this.$toast 失效问题解决方案

    这篇文章主要介绍了vue this.$toast 失效问题汇总,本文给大家分享完美解决方案,感兴趣的朋友跟随小编一起看看吧
    2024-03-03
  • Vue3使用Element Plus实现列表界面的方法步骤

    Vue3使用Element Plus实现列表界面的方法步骤

    写后台管理的时候会有很多列表以及相应的条件查询,下面这篇文章主要给大家介绍了关于Vue3使用Element Plus实现列表界面的方法步骤,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-04-04
  • vue 获取元素额外生成的data-v-xxx操作

    vue 获取元素额外生成的data-v-xxx操作

    这篇文章主要介绍了vue 获取元素额外生成的data-v-xxx操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • vue调用谷歌授权登录获取用户通讯录的实现示例

    vue调用谷歌授权登录获取用户通讯录的实现示例

    本文主要介绍了vue调用谷歌授权登录获取用户通讯录的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • Vue中textarea自适应高度方案的实现

    Vue中textarea自适应高度方案的实现

    本文主要介绍了Vue中textarea自适应高度方案的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01

最新评论