• 关于前后端分离后的路由控制问题


    路由控制在多数框架中均有专门的方法,比如ng和node。但是只会使用是不可以的,虽然我连使用都不会。研究它的实现方式,才是正经道路,因为无论框架中的方式都炫酷或者实用,都是从底层开发出来了,那么底层的方法,就是需要了解研究的方法。依此,在以后的使用或者是自定义的时候才能够如臂使指。

    那么前端的路由控制总归来说是有两种方法的。

    第一种是H5新增的一类API,history。首先来看一下它的诸多方法。

    //与浏览器后退按钮作用相同
    window.history.back();
    
    //跳转到
    window.history.go(number);
    number == -1 时与back作用相同
    
    //与浏览器前进按钮作用相同
    window.history.forward();
    
    //向浏览器历史栈中添加一条历史记录
    window.history.pushState(data, title, url);
    
    //修改当前历史记录
    window.history.replaceState(data, title, url);

    //同页面不刷新跳转时触发事件
    window.onpopstate()

    这种方法支持IE9以上(不包括IE9)及其余浏览器,data数据最多可以存储640KB。并且可以根据自己需要定义url的样式,一般情况下默认使用#、#!和?作为分隔,当然也可以使用其他,甚至“/”。

    第二种方法,window.location.hash。

    这种方法支持IE7以上及其余所有浏览器,不包括IE7。它是以#作为前端路由的分隔的。

    同样的,也有跳转触发事件,onhashchange

    如下是兼容情况。(mark到的)

    history&&history.pushState兼容如下:
     chrome true;
     Firefox true;
     IE10 true;
     IE<=9 false;  
     PS:ie<=9既然不支持这些api那就只能采用hash方案,来实现路由系统的兼容了。
    
    hashchange兼容如下:
     IE9 true;
     IE8 true;
     IE7 false;
     ...
    
    页面load时,onhashchange默认触发情况:
     chrome 需主动trigger才能触发
     FF 需主动trigger才能触发
     IE 需主动trigger才能触发
    
    页面load时,onpopstate默认触发情况:
     chrome <34版本之前的默认触发 
     FF 默认不触发
     IE 默认不触发
    PS:以上是我手动测试的一个大概情况,具体的兼容情况可以去这里测试(http://caniuse.com/)。

    而作为IE6、7的话就要使用setIntval()来侦听url的变化了。

    那么作为分隔,#之后的内容是并不为ajax抓取的。

    例如

    //使用ajax,url=http://qq.com/index.html#444
    //那么其实是ajax的请求地址是
    http://qq.com/index.html

    那么其实路由控制就是这样的原理而已。

    如果使用h5的api的话需要和后台进行规范约定,约定哪些是前端来做路由控制,哪些由后台来做。

    当然也可以两种方式结合起来,这样来做到一个兼容性。噢。不!是三种结合,万一。。。对不对。

    总结如下

    H5+hash方案:兼容所以浏览器,又照顾到了高级浏览器应用新特性。
    
    纯H5方案:表示IE是谁,我不认识-_-",这套方案应用纯H5的新特性,URL随心定制。
    
    纯Hash方案:其实一开始我是拒绝的,可是...可是...duang...IE~~:)

    那么这就是底层的实现方法了,至于ng和node等框架中如何来做路由控制我还没接触,最近的项目使用的是springMVC框架,那么路由控制全由后台来掌控,就没那么多事了。

  • 相关阅读:
    【AT1219】歴史の研究(回滚莫队模板)
    【洛谷4245】【模板】任意模数多项式乘法
    同余与逆元
    线性推逆元
    大整数类型!
    浅谈扩展欧几里得定理(附裴蜀定理)
    二进制串题解(国际考试备用题)
    String 的成员函数
    关于快速幂
    string的赋值
  • 原文地址:https://www.cnblogs.com/yunzhexiaye/p/6489671.html
Copyright © 2020-2023  润新知