前端路由出现之前的链接跳转
// 新开一个tab
window.open('http://aaa.baidu.com','_blank');
<a href='http://aaa.baidu.com' target='_blank'></a>
// 新开一个窗口
window.open('http://aaa.baidu.com','_blank','width=1000,height=800');
// 在当前页面进行刷新跳转,并生成历史记录
window.location.href = 'http://aaa.baidu.com';
window.location.replace('http://aaa.baidu.com');
以上,location是window对象上的属性,是在刷新页面的基础上进行页面跳转,在发生行为之后,会重新向服务器请求资源。
H5中的history对象可以实现不刷新跳转
history对象的出现让我们可以操纵浏览器的历史记录。
history.pushState()
history.popState()
history.replaceState()
实现原理:
当点击链接跳转时,去除链接默认行为,获取链接参数,将链接参数和响应的页面state通过pushstate的方式推入到history对象的历史记录中。
相应的url也会改变,但是不会触发页面刷新,此时我们更新页面视图,达到不刷新页面、进行链接跳转的功能。
想要回退或前进,会触发popState事件、url改变,获取到相应的state,然后渲染相应的视图。
前端路由
在前后端不分离的项目当中,路由都是由服务器控制的,每一个路由下面都有一个html文件,请求相应的路由会返回相应的html文件给浏览器。
由于后端路由页面切换需要刷新页面,不利于用户体验,所以出现了SPA,单页面应用。
SPA也就是整个项目只有一个html文件,路由之前的切换只是不同视图之前的隐藏和显示罢了。
SAP前端路由分为两种:hash和brower。
// 以react-router为例
brower路由原理:
利用H5的history对象控制浏览器的历史记录(react对history对象进行了封装)。
比如:props.history.push(),其实就是history的pushState方法,会生成一条新的历史记录,url发生变化,此时react-router可以监听到url的变化,然后获取到路由改变,对前端路由进行匹配,渲染匹配到的路由所对应的组件。
hash路由原理:
每次url发生变化时,就会产生一个浏览记录,hash发生改变也一样,并且hash改变并不会向服务器发送请求。
hash-router会监听hash路由的改变,然后匹配路由所对应的组件。