实现的基本原理是监听url的变化,截取url,然后根据url用Ajax请求数据,替换DOM。
通常有两种实现路由的方式:
1.hash模式
2.history模式
hash模式
location对象有一个hash属性,它的作用是返回或设置url中从#开始的url。
并且#后面的hash值的变化不会导致浏览器向服务器发送请求,也就不会导致页面刷新。
hash值的变化会触发hashchange事件
window.addEventListener('hashchange',function () {
//获取hash值
let hash = document.location.hash;
//之后根据hash值调用Ajax请求数据替换dom
})
history模式
1.history.pushState
pushstate是H5的新接口,用pushstate方法可以改变url而不刷新页面。
history.pushstate(state,title,url)
state:一个与指定网址相关的状态对象,popstate事件触发时,该对象会传入回调函数。允许设为null。
title:新页面的标题,但是所有浏览器目前都忽略这个值,设为null。
url:新的网址,必须与当前页面处在同一个域。浏览器的地址栏将显示这个网址。
2.popstate事件
popstate事件由history.go()和history.back()触发,配合popstate可以让路由支持浏览器的历史前进和后退操作。
window.addEventListener('popstate', function(){
//自定义Ajax事件
});