- 稍微复杂一点的SPA,都需要路由
- vue-router 也是 vue 全家桶的标配之一
vue-router的路由模式
hash
h5 history
网页 url 组成部分
// http://127.0.0.1:8881/01-hash.html?a=100&b=20#/aaa/bbb
location.protocol // http:
location.hostname // 127.0.0.1
location.host // 127.0.0.1:8881
location.port // 8881
location.pathname // /01-hash.html
location.search // ?a=100&b=20
location.hash // #/aaa/bbb
hash 的特点
hash 变化会触发网页跳转,即浏览器的前进、后退
hash 变化不会刷新页面,SPA必须的特点
hash 永远不会提交到 server 端(前端自生自灭)
/*
hash 变化,包括:
· JS 修改 url
· 手动修改 url 的 hash
· 浏览器前进、后退
*/
// window.onhashchange
window.addEventListener('hashchange', (event) => {
console.log(`old url:${event.oldURL}`)
console.log(`new url:${event.newURL}`)
console.log(`hash:${location.hash}`)
})
// 页面初次加载、获取hash
document.addEventListener('DOMContentLoaded', () => {
console.log(`hash:${location.hash}`)
})
// JS 修改 url
document.getElementById('btn1').addEventListener('click', () => {
location.href = '#/user'
})
初次打开,没有hash的页面
点击修改hash的按钮
然后手动修改url的hash,页面也不刷新,但是会触发
同时浏览器也可以前进后退。这个就是vue-router或者react-router实现hash的基本原理