美文网首页
从vue-router看前端路由的两种实现

从vue-router看前端路由的两种实现

作者: __越过山丘__ | 来源:发表于2019-01-09 15:52 被阅读0次

https://zhuanlan.zhihu.com/p/27588422

通过 mode 参数来实现控制路由

  1. HashHistory

通过Vue.mixin()方法,全局注册一个混合,影响注册之后所有创建的每个 Vue 实例,
该混合在beforeCreate钩子中通过Vue.util.defineReactive()定义了响应式的_route属性。
当_route值改变时,会自动调用Vue实例的render()方法,更新视图。

$router.push() --> HashHistory.push() --> History.transitionTo() --> 

History.updateRoute() --> {app._route = route} --> vm.render()
  1. HTML5History

从HTML5开始,History interface提供了两个新的方法:pushState(), replaceState()使得我们可以对浏览器历史记录栈进行修改:

代码结构以及更新视图的逻辑与hash模式基本类似,只不过将对window.location.hash直接进行赋值window.location.replace()改为了调用history.pushState()和history.replaceState()方法。

除此之外vue-router还为非浏览器环境准备了一个abstract模式,其原理为用一个数组stack模拟出浏览器历史记录栈的功能。

history模式的一个问题

我们知道对于单页应用来讲,理想的使用场景是仅在进入应用时加载index.html,后续在的网络操作通过Ajax完成,不会根据URL重新请求页面,但是难免遇到特殊情况,比如用户直接在地址栏中输入并回车,浏览器重启重新加载应用等。

hash模式仅改变hash部分的内容,而hash部分是不会包含在HTTP请求中的:

http://oursite.com/#/user/id   // 如重新请求只会发送http://oursite.com/

故在hash模式下遇到根据URL请求页面的情况不会有问题。

而history模式则会将URL修改得就和正常请求后端的URL一样

http://oursite.com/user/id

在此情况下重新向后端发送请求,如后端没有配置对应 /user/id 的路由处理,则会返回404错误。官方推荐的解决办法是在服务端增加一个覆盖所有情况的候选资源:如果 URL 匹配不到任何静态资源,则应该返回同一个 index.html 页面,这个页面就是你 app 依赖的页面。同时这么做以后,服务器就不再返回 404 错误页面,因为对于所有路径都会返回 index.html 文件。为了避免这种情况,在 Vue 应用里面覆盖所有的路由情况,然后在给出一个 404 页面。或者,如果是用 Node.js 作后台,可以使用服务端的路由来匹配 URL,当没有匹配到路由的时候返回 404,从而实现 fallback。

相关文章

  • vue-router 源码实现前端路由的两种方式

    在学习 vue-router 的代码之前,先来简单了解一下前端路由。 前端路由主要有两种实现方法: Hash 路由...

  • Vue 基础 - 前端路由

    使用vue-router实现前端路由 安装vue-router: 配置路由文件,并在vue实例中导入: 设置视图(...

  • Vue系列(1)— vue router(上)

    vue-router在实现单页面前端路由时,提供了两种方式:Hash模式和History模式来实现,根据mode参...

  • 一起学Vue:路由(vue-router)

    前言 学习vue-router就要先了解路由是什么?前端路由的实现原理?vue-router如何使用?等等这些问题...

  • 从vue-router看前端路由的两种实现

    https://zhuanlan.zhihu.com/p/27588422 通过 mode 参数来实现控制路由 H...

  • vue路由

    今日目标 1.能够说出什么是路由2.能够说出前端路由的实现原理3.能够使用Vue-Router实现前端路由4.能够...

  • vue路由

    今日目标 1.能够说出什么是路由2.能够说出前端路由的实现原理3.能够使用Vue-Router实现前端路由4.能够...

  • Vue路由模式

    为了构架单页面应用,需要引入前端的路由系统Vue-router。 路由有两种模式:hash、history,默认会...

  • 2019-06-23 Vue-Router中history与ha

    hash前端路由,无刷新history 会去请求接口 vue-router提供两种模式的原因: vue 是渐进...

  • vue-router的两种模式

    vue-router两种模式,hash,history 为了构建SPA(单页面应用),需要引入前端路由系统,这就是...

网友评论

      本文标题:从vue-router看前端路由的两种实现

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