前端路由学习

SPA单页面应用

单页面应用指的是应用只有一个主页面,通过动态的替换DOM内容并同步修改url地址,来模拟多页面应用的效果,切换页面的功能直接由前台脚本完成,而不是由后端渲染完成后前端只负责展示

----路由

路由是URL到函数的映射

路由分为后端路由和前端路由

--后端路由

服务器端路由,对于服务器来说,当接收到客户端发来的http请求,就会根据请求的URL,来找到相应的映射函数,然后执行该函数,并将函数的返回值发送给客户端

优点:安全性好,SEO好

缺点:加大服务器的压力,不利于用户体验,代码冗合

--前端路由

路由的映射函数通常是进行一些DOM的显示和隐藏操作,当访问不同的路径的时候,会显示不同的页面组件

缺点:使用浏览器的前进,后退键时会重新发送请求,来获取数据,没有合理地利用缓存

前端路由的实现

----基于hash  location.hash

location.hash的值就是URL中#后面的内容

hash存在几个特性:1.URL中hash值只是客户端的一种状态,即向服务端发送请求时,hash部分不会被发送;2.hash值的改变,都会在浏览器的访问历史中增加一个记录,因此可以通过浏览器的回退、前进按钮控制hash的切换;3.可以使用hashchange事件来监听hash的变化

--触发hash变化的方式

1.通过a标签,设置href属性,当用户点击标签时,url会发生变化,会触发hashchange事件

2.直接对location.hash进行赋值,改变url,触发hashchange事件

--优缺点

优点:实现简单,兼容性好,绝大多数前端框架均提供了给予hash的路由实现,不需要服务器端进行任何设置和开发,除了资源加载和ajax请求以外,不会发起其他请求

缺点:对于部分需要重定向的操作,后端无法获取hash部分内容,导致后台无法取得url中的数据

----基于history API

H5提供了history API来实现URL的变化,主要的2个API为 history.pushState() 和 history.replaceState() ,这两个API可以在不进行刷新的情况下,操作浏览器的历史纪录;唯一不同的是,前者是新增一个历史记录,后者是直接替换当前的历史纪录

pushState()和replaceState()都接收三个参数:1.状态对象,一个js对象,与用pushState()方法创建的新历史记录条目关联,无论何时用户导航到新创建的状态,会触发popstate事件,并能在事件中使用该对象

2.标题,一般浏览器会忽略,最好传null

3.地址,即需要新增的历史记录的地址,浏览器不会去直接加载该地址,但后面也可能会去尝试加载该地址,此外需要注意的是,传入的URL与当前的URL应该是同源的

--优缺点

优点:对于重定向过程中不会丢失url中的参数,后端可以拿到这部分数据,绝大多数前端框架军均提供了history模式的路由实现,后端可以准确跟踪路由信息,可以使用 history.state来获取当前url对应的状态信息

缺点:兼容性不如hash路由,需要后端支持,每次返回html文档

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值