美文网首页
vue路由hash和history

vue路由hash和history

作者: 大大大大大西瓜G | 来源:发表于2022-07-01 15:27 被阅读0次

一、路由原理

1、SPA

SPA,即单页面应用(Single Page Application)。就是只有一张 web页面的应用。单页应用程序 (SPA) 是加载单个html页面并在用户与应用程序交互时动态更新该页面的web应用程序。浏览器一开始会加载必需的html、css和 js ,所有的操作都在这张页面上完成,都由js来控制

2、什么时候需要路由

对于现代开发的项目来说,稍微复杂一点的SPA,都需要用到路由。而 vue-roter 正是 vue 的路由标配,且 vue-router 有两种模式hashhistory

二、Hash模式

1、定义

hash 模式是一种把前端路由的路径用井号 # 拼接在真实 url 后面的模式。当井号 # 后面的路径发生变化时,浏览器并不会重新发起请求,而是会触发 onhashchange 事件。

2、网页url组成部分

(1)了解几个url的属性

属性 含义
location.protocal 协议
location.hostname 主机名
location.host 主机
location.port 端口号
location.patchname 访问页面
location.search 搜索内容
location.hash 哈希值

(2)演示

下面用一个网址来演示以上属性:

//http://127.0.0.1:8001/01-hash.html?a=100&b=20#/aaa/bbb
location.protocal // 'http:'
localtion.hostname // '127.0.0.1'
location.host // '127.0.0.1:8001'
location.port //8001
location.pathname //'01-hash.html'
location.serach // '?a=100&b=20'
location.hash // '#/aaa/bbb'

3、hash的特点

  • hash变化会触发网页跳转,即浏览器的前进和后退。
  • hash 可以改变 url ,但是不会触发页面重新加载(hash的改变是记录在 window.history 中),即不会刷新页面。即所有页面的跳转都是在客户端进行操作。因此,这并不算是一次 http 请求,所以这种模式不利于 SEO 优化。hash 只能修改 # 后面的部分,所以只能跳转到与当前 url 同文档的 url
  • hash 通过 window.onhashchange 的方式,来监听 hash 的改变,借此实现无刷新跳转的功能。
  • hash 永远不会提交到 server 端(可以理解为只在前端自生自灭)。

三、History模式

1、定义

history APIH5 提供的新特性,允许开发者直接更改前端路由,即更新浏览器 URL 地址而不重新发起请求

2、与hash的区别

hashhistory 在浏览器下刷新时的区别:

正常页面浏览

https://github.com/xxx 刷新页面

https://github.com/xxx/yyy 刷新页面

https://github.com/xxx/yyy/zzz 刷新页面

改造H5 history模式

https://github.com/xxx 刷新页面

https://github.com/xxx/yyy 前端跳转,不刷新页面

https://github.com/xxx/yyy/zzz 前端跳转,不刷新页面

3、history的API

HTML5新增的API:

API 定义
history.pushState(data, title [, url]) pushState主要用于往历史记录堆栈顶部添加一条记录。各参数解析如下:①data会在onpopstate事件触发时作为参数传递过去;②title为页面标题,当前所有浏览器都会忽略此参数;③url为页面地址,可选,缺少时表示为当前页地址
history.replaceState(data, title [, url]) 更改当前的历史记录,参数同上; 上面的pushState是添加,这个更改
history.state 用于存储以上方法的data数据,不同浏览器的读写权限不一样
window.onpopstate 响应pushState或者replaceState的调用

4、history的特点

主要有以下特点:

  • 新的 url 可以是与当前 url 同源的任意 url ,也可以是与当前 url 一样的地址,但是这样会导致的一个问题是,会把重复的这一次操作记录到栈当中。
  • 通过 history.state ,添加任意类型的数据到记录中。
  • 可以额外设置 title 属性,以便后续使用。
  • 通过 pushStatereplaceState 来实现无刷新跳转的功能。

5、存在问题

对于 history 来说,确实解决了不少 hash 存在的问题,但是也带来了新的问题:

  • 使用 history 模式时,在对当前的页面进行刷新时,此时浏览器会重新发起请求。如果 nginx 没有匹配得到当前的 url ,就会出现 404 的页面。
  • 而对于 hash 模式来说, 它虽然看着是改变了 url ,但不会被包括在 http 请求中。所以,它算是被用来指导浏览器的动作,并不影响服务器端。因此,改变 hash 并没有真正地改变 url ,所以页面路径还是之前的路径, nginx 也就不会拦截。
  • 因此,在使用 history 模式时,需要通过服务端来允许地址可访问,如果没有设置,就很容易导致出现 404 的局面。

6、两者选择

在实际的项目中,如何对这两者进行选择:

  • to B 的系统推荐用 hash ,相对简单且容易使用,且因为 hashurl 规范不敏感
  • to C 的系统,可以考虑选择 H5 history ,但是需要服务端支持
  • 能先用简单的,就别用复杂的

相关文章

  • Vue 路由router

    路由 路由是基于hash 和 history 封装的 hash history 路由在vue中使用流程 ps. 如...

  • 2020-06-03面试--vue基础篇

    ####1,vue的路由实现原理有哪几种 答案:Vue的路由实现:hash模式 和 history模式 hash模...

  • Vue的两种路由模式

    在vue-router路由对象中,路由有两种模式:hash和history,而默认的是hash模式. hash路由...

  • 2020-06-03面试--vue基础篇

    1,vue的路由实现原理有哪几种 答案:Vue的路由实现:hash模式 和 history模式 hash模式:在浏...

  • Vue的两种路由模式

    在vue-router路由对象中,路由有两种模式: hash 和 history,而默认的是hash模式,hash...

  • Vue路由「十五」-- vue-router的路由模式***

    vue-router的路由模式有 hash模式 和 history模式,默认使用 hash 模式hash模式:使用...

  • 【源码】vue-rotuer1 原理

    大纲hash路由history路由vue-router简单实现vue中的数组,对象添加属性的监听 (1)Hash ...

  • vue-router常见用法

    hash模式和history模式 hash模式(vue-router默认hash模式)就是看到路由上面会有一个 #...

  • Vue Router路由插件

    Vue Router,路由插件。 #要点 hash模式和history模式的区别? 路由组件传参与props属性注...

  • Vue-router路由

    vue 监听路由变化 vue-router 由hash向history模式变迁 什么是路由 后端路由:对于普通的网...

网友评论

      本文标题:vue路由hash和history

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