在学习vue-router时,了解到前端路由的两种模式,本文就前端路由,及其两种模式的原理和使用场景,作一个整理总结。html
路由这个概念最早是后端出现的,简单来讲路由就是用来跟后端服务器进行交互的一种方式,经过不一样的路径,来请求不一样的资源,请求不一样的页面是路由的其中一种功能。前端
前端路由的出现要从 ajax 开始,有了 Ajax 后,用户交互就不用每次都刷新页面,体验带来了极大的提高。随着技术的发展,简单的异步已经不能知足需求,因此异步的更高级体验出现了——SPA(单页应用)。 SPA 的出现大大提升了 WEB 应用的交互体验。在与用户的交互过程当中,再也不须要从新刷新页面,获取数据也是经过 Ajax 异步获取,页面显示变的更加流畅。 但因为 SPA 中用户的交互是经过 JS 改变 HTML 内容来实现的,页面自己的 url 并无变化,这致使了两个问题:vue
前端路由就是为了解决上述问题而出现的。node
简单的说,就是在保证只有一个 HTML 页面,且与用户交互时不刷新和跳转页面的同时,为 SPA 中的每一个视图展现形式匹配一个特殊的 url。在刷新、前进、后退和SEO时均经过这个特殊的 url 来实现。 为实现这一目标,咱们须要作到如下二点:ajax
接下来要介绍的 hash 模式和 history 模式,就是实现了上面的功能。vue-router
//html
<ul id="menu">
<li>
<a href="#index">首页</a>
</li>
<li>
<a href="#news">资讯</a>
</li>
<li>
<a href="#user">我的中心</a>
</li>
</ul>
<div id="app"></div>
//js
function hashChange(e){
let app = document.getElementById('app')
switch (location.hash) {
case '#index':
app.innerHTML = '<h1>这是首页内容</h1>'
break
case '#news':
app.innerHTML = '<h1>这是新闻内容</h1>'
break
case '#user':
app.innerHTML = '<h1>这是我的中心内容</h1>'
break
default:
app.innerHTML = '<h1>404</h1>'
}
}
window.onhashchange = hashChange
hashChange()
复制代码
//html
<ul id="menu">
<li>
<a href="/index">首页</a>
</li>
<li>
<a href="/news">资讯</a>
</li>
<li>
<a href="/user">我的中心</a>
</li>
</ul>
<div id="app"></div>
//js
document.querySelector('#menu').addEventListener('click',function (e) {
if(e.target.nodeName ==='A'){
e.preventDefault()
let path = e.target.getAttribute('href') //获取超连接的href,改成pushState跳转,不刷新页面
window.history.pushState({},'',path) //修改浏览器中显示的url地址
render(path) //根据path,更改页面内容
}
})
function render(path) {
let app = document.getElementById('app')
switch (path) {
case '/index':
app.innerHTML = '<h1>这是首页内容</h1>'
break
case '/news':
app.innerHTML = '<h1>这是新闻内容</h1>'
break
case '/user':
app.innerHTML = '<h1>这是我的中心内容</h1>'
break
default:
app.innerHTML = '<h1>404</h1>'
}
}
window.onpopstate = function (e) {
render(location.pathname)
}
render('/index')
复制代码
参考连接:后端