zoukankan      html  css  js  c++  java
  • 能说下 vue-router 中常用的 hash 和 history 路由模式实现原理吗?

    这个router有两种模式:hash模式(默认)、history模式(需配置mode: 'history')

     然后,我们来研究下两者的原理:

    我们先来认识下这位朋友#,这个#就是hash符号,中文名哈希符或锚点,当然这在我们前端领域姑且这么称呼。

    然后哈希符后面的值,我们称之为哈希值。OK,接下来我们继续分析他的原理。路由的哈希模式其实是利用了window可以监听onhashchange事件,也就是说你的url中的哈希值(#后面的值)如果有变化,前端是可以做到监听并做一些响应(搞点事情),这么一来,即使前端并没有发起http请求他也能够找到对应页面的代码块进行按需加载。

    后来人们给他起了一个霸气的名字叫前端路由,成为了单页应用标配。

    大伙可以围观下网易云音乐的url模式:https://music.163.com/#/friend

    history模式

    我们先介绍一下H5新推出的两个神器:pushStatereplaceState   history模式中的原理。

    pushState

    浏览器不会向服务端请求数据,直接改变url地址,可以类似的理解为变相版的hash;但不像hash一样,浏览器会记录pushState的历史记录,可以使用浏览器的前进、后退功能作用。

    replaceState   

    不同于pushState,replaceState仅仅是修改了对应的历史记录。

    具体自行百度,简而言之,这两个神器的作用就是可以将url替换并且不刷新页面,好比挂羊头卖狗肉,

    http并没有去请求服务器该路径下的资源,一旦刷新就会暴露这个实际不存在的“羊头”,显示404。

    那么如何去解决history模式下刷新报404的弊端呢,这就需要服务器端做点手脚,将不存在的路径请求重定向到入口文件(index.html)

    前后端联手,齐心协力做好“挂羊头卖狗肉”的完美特效。

    总之,pushState方法不会触发页面刷新,只是导致history对象发生变化,地址栏会有反应。

  • 相关阅读:
    非递归前序遍历,效率高 和 中序遍历代码都相似
    递归-变量-堆栈-透彻理解
    Linux 进程管理
    5linux引导流程解析
    Linux 软件包管理
    vim
    Linux常用命令
    Linux 系统安装
    linux 应用和发展
    贴图、纹理、材质的区别是什么? 还有shader
  • 原文地址:https://www.cnblogs.com/Rivend/p/12629285.html
Copyright © 2011-2022 走看看