美文网首页
Vue-router中hash模式和history模式的区别

Vue-router中hash模式和history模式的区别

作者: 张星的 | 来源:发表于2019-08-01 16:18 被阅读0次
    1. hash模式url永远带着#号,我们在开发当中默认使用这个模式。
    2. 那么什么时候要用history模式呢?如果用户考虑url的规范那么就需要使用history模式,因为history模式没有#号,是个正常的url适合推广宣传。
      当然其功能也有区别,比如我们在开发app的时候有分享页面,那么这个分享出去的页面就是用vue或是react做的,咱们把这个页面分享到第三方的app里,有的app里面url是不允许带有#号的,所以要将#号去除那么就要使用history模式,但是使用history模式还有一个问题就是,在访问二级页面的时候,做刷新操作,会出现404错误,那么就需要和后端人配合让他配置一下apache或是nginx的url重定向,重定向到你的首页路由上就ok啦。

    1. hash与history的区别

    对比点 hash路由方式 历史路由方式
    url显示 有#,很Low 无#,好看
    回车刷新 可以加载到hash值对应页面 一般就是404掉了
    支持版本 支持低版本浏览器和IE浏览器 HTML5新推出的API

    hash模式

    我们先来认识下这位朋友#,这个#就是hash符号,中文名哈希符或锚点,当然这在我们前端领域姑且这么称呼。
    然后哈希符后面的值,我们称之为哈希值。OK,接下来我们继续分析他的原理。路由的哈希模式其实是利用了window可以监听onhashchange事件,也就是说你的url中的哈希值(#后面的值)如果有变化,前端是可以做到监听并做一些响应(搞点事情),这么一来,即使前端并没有发起http请求他也能够找到对应页面的代码块进行按需加载。
    后来人们给他起了一个霸气的名字叫前端路由,成为了单页应用标配。
    大伙可以围观下网易云音乐的url模式:https://music.163.com/#/friend

    history模式

    我们先介绍一下H5新推出的两个神器:pushState与replaceState
    具体自行百度,简而言之,这两个神器的作用就是可以将url替换并且不刷新页面,好比挂羊头卖狗肉,http并没有去请求服务器该路径下的资源,一旦刷新就会暴露这个实际不存在的“羊头”,显示404。
    那么如何去解决history模式下刷新报404的弊端呢,这就需要服务器端做点手脚,将不存在的路径请求重定向到入口文件(index.html),前后端联手,齐心协力做好“挂羊头卖狗肉”的完美特效。
    至此,我们的前端路由在实现与展示效果上又更进了一步!
    总之,pushState方法不会触发页面刷新,只是导致history对象发生变化,地址栏会有反应。

    总结
    传统的路由指的是:当用户访问一个url时,对应的服务器会接收这个请求,然后解析url中的路径,从而执行对应的处理逻辑。这样就完成了一次路由分发。
    而前端路由是不涉及服务器的,是前端利用hash或者HTML5的history API来实现的,一般用于不同内容的展示和切换

    相关文章

      网友评论

          本文标题:Vue-router中hash模式和history模式的区别

          本文链接:https://www.haomeiwen.com/subject/kclzrctx.html