赞
踩
1.路由是什么
number = number || 1;
1.1 路由器
1.2 前端路由
http://127.0.0.1/#1
、#2、#3、#4,分别展示DIV1、DIV2、DIV3、DIV4界面window.location.hash
获得url中的 #xxx<a href="#1">go to 1</a>
通过a标签可以改变hash的值window.addEventListener("hashchange",()=>{})
number = number || 1
//最简单的路由实现 //HTML中 <a href="#2">go to 2</a> <div class="app"></div> <div style="display=none" id="div1">1</div> <div style="display=none" id="div1">2</div> <div style="display=none" id="div1">3</div> <div style="display=none" id="div1">4</div> <div style="display=none" id="div404">404</div> //JS中 const number = window.loacation.hash.substr(1) number = number || 1 //默认路由:number不存在就取1 const div = document.querySelector(`#div${number}`) const app = document.querySelector(`#app`) div.display = 'block' app.appendChild(div) window.addEventListener("hashchange",()=>{ //重新获取hash,将新的div放到div#app中显示 })
1.3 路由表
const div1 = document.createElement("div") div1.innerHTML = "1" //234同理 const routeTable = { // 表驱动编程,这样写了HTML里面就不需要div了 "1": div1, "2": div2, "3": div3, "4": div4 }; function route(){//渲染路由 let number = window.location.hash.substr(1) const app = document.querySelector(`#app`) //根据表来寻找对应的div let div = routeTable[number.toString()]; //获取界面、渲染界面代码省略 app.appendChild(div) }
1.4 嵌套路由
function route(container){//渲染路由
let number = window.location.hash.substr(1)
//把1/1分割成两个部分:[1,1],分割前后两个数字,根据两个路由表来寻找对应的div
let div = routeTable[number.toString()];
container.innerHTML = ''
container.appendChild(div)
}
router(div1) //router(app)
2.路由的三种模式
baidu.com/#xxx
都默认访问 baidu.com/
,永远展示默认路由baidu.com/xxxx
不论/后面输入什么都到首页2.1 hash模式
let number = window.location.hash.substr(1);
2.2 history 模式
let number = window.location.pathname
/1
"/1"
//点击a标签,阻止默认事件,跳转到页面
a.addEventListener("click",e=>{
e.preventDefault()
const href = a.getAtrribute("href")
window.history.pushState(null, `page ${href}`, href);
onStateChange(href) //通知state改变,并传参数
})
function onStateChange(){
route(app)
}
2.3 hash模式和history模式对比
2.4 memory 模式
3.Vue-Router 源码
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。