前端路由是什么

前端路由是什么

探讨这个问题的时候,首先需要了解路由的概念

简单来说路由就是用来跟后端服务器进行交互的一种方式,通过不同的路径,来请求不同的资源,请求不同的页面是路由的其中一种功能。

路由最开始是从后端出现的,后来由于ajax的出现,带来了无刷新的加载数据,也就出现了SPA,因为要实现无刷新的跳转页面,所以就出现了前端路由

前端路由的实现其实很简单。

本质上就是检测 url 的变化,截获 url 地址,然后解析来匹配路由规则。

目前前端路由的实现主要有两种方法
  1. hash
    就是利用#,在路由中叫hash,使用hashchange事件来监听url里#的变化
(function(window) {

  // 如果浏览器不支持原生实现的事件,则开始模拟,否则退出。
  if ( "onhashchange" in window.document.body ) { return; }

  var location = window.location,
  oldURL = location.href,
  oldHash = location.hash;

  // 每隔100ms检查hash是否发生变化
  setInterval(function() {
    var newURL = location.href,
    newHash = location.hash;

    // hash发生变化且全局注册有onhashchange方法(这个名字是为了和模拟的事件名保持统一);
    if ( newHash != oldHash && typeof window.onhashchange === "function"  ) {
      // 执行方法
      window.onhashchange({
        type: "hashchange",
        oldURL: oldURL,
        newURL: newURL
      });

      oldURL = newURL;
      oldHash = newHash;
    }
  }, 100);
})(window);
  1. History API

其中的两个新增的API history.pushState 和 history.replaceState

这两个 API 都接收三个参数,分别是

状态对象(state object) — 一个JavaScript对象,与用pushState()方法创建的新历史记录条目关联。无论何时用户导航到新创建的状态,popstate事件都会被触发,并且事件对象的state属性都包含历史记录条目的状态对象的拷贝。

标题(title) — FireFox浏览器目前会忽略该参数,虽然以后可能会用上。考虑到未来可能会对该方法进行修改,传一个空字符串会比较安全。或者,你也可以传入一个简短的标题,标明将要进入的状态。

地址(URL) — 新的历史记录条目的地址。浏览器不会在调用pushState()方法后加载该地址,但之后,可能会试图加载,例如用户重启浏览器。新的URL不一定是绝对路径;如果是相对路径,它将以当前URL为基准;传入的URL与当前URL应该是同源的,否则,pushState()会抛出异常。该参数是可选的;不指定的话则为文档当前URL。

相同之处是两个 API 都会操作浏览器的历史记录,而不会引起页面的刷新。

不同之处在于,pushState会增加一条新的历史记录,而replaceState则会替换当前的历史记录。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文由尚妆前端开发工程师欲休撰写本文发表于尚妆博客,欢迎订阅! 移动端开发在某些场景中有着特殊需求,如为了提高用户...
    尚妆产品技术刊读阅读 1,922评论 0 11
  • 路由实现原理,就是根据不同的 url ,在页面上显示相应的内容。而浏览器 url 变化时,会造成页面的刷新。前端路...
    极客传阅读 207评论 0 1
  • 什么是SPA SPA是single page web application的简称,译为单页Web应用。简单的说S...
    oWSQo阅读 363评论 0 2
  • 阚清子和纪凌尘分手了,纪凌尘说:你喜欢大海 ,我爱过你。 第一次认识他们是在偶然看到的视频里 阚清子落落大...
    失去故里阅读 321评论 0 0
  • 一边啃超市里12元三个超大的辣鸡腿,一边看完MY麦子那篇你妈喊你回家相亲。我也想写点关于我相亲的事。 先说最近好了...
    一只单身猪阅读 334评论 0 0