美文网首页
前端路由是什么

前端路由是什么

作者: 张镕凡 | 来源:发表于2018-04-27 10:46 被阅读0次

    前端路由是什么

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

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

    路由最开始是从后端出现的,后来由于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则会替换当前的历史记录。

    相关文章

      网友评论

          本文标题:前端路由是什么

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