成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

帶你了解 Vue-Router 的兩種路由模式

開發(fā) 前端
Vue-Router有兩個路由模式,分別是哈希hash模式和歷史history模式,然后默認(rèn)的是哈希hash模式。

Vue-Router有兩個路由模式,分別是哈希hash模式和歷史history模式,然后默認(rèn)的是哈希hash模式。

現(xiàn)在有個問題是,我們了解這兩個模式的區(qū)別嗎?或者只是了解它的路徑上有沒有 # 這個符號的區(qū)別嗎?

hash模式

hash模式是開發(fā)中默認(rèn)的模式,它的URL帶著一個#,例如:www.baidu.com/#/vue,它的hash值就是#/vue

hash的值會出現(xiàn)再URL里面的,但是不會出現(xiàn)再HTTP請求之中的,也就是說,它并沒有向后端發(fā)起請求,對后端是沒有影響的

我們看一下如果沒有使用哈希在瀏覽器是怎么樣的

在上面可以看出,如果萬一后端沒有給我們配備路由,我們?nèi)菀讈G失這個頁面,請求不到這個URL。

再看看有哈希路由的

我沒有在后端配置這個路由,但是它依然可以加載到,說明

哈希路由它只是改變hash值,不會重新加載頁面,這樣的話跟我們app的體驗是一樣的,只是改變了樣子,但是沒有改變內(nèi)在

而且這種模式瀏覽器支持度非常好,而且低版本的瀏覽器也支持,沒有兼容性的問題。

目前來說,hash路由它被稱為前端路由,作為單頁應(yīng)用的標(biāo)準(zhǔn)搭配了,但是這么好用原理知道多少呢?

我們來看一下它的實現(xiàn)原理

<body>
<button id="btn">點擊更改路徑</button>

<script>
const btn = document.getElementById('btn')
window.onhashchange = (e) => {
console.log('old: ', e.oldURL);
console.log('new: ', e.newURL);

console.log('hash: ', location.hash);
}
btn.addEventListener('click', () => {
location.href = '#/home'
})
</script>
</body>

上面我寫了一個demo,hash模式的主要原理就是onhashchange()事件,使用onhashchange()事件的好處就是,在頁面的hash值發(fā)生變化時,無需向后端發(fā)起請求

我通過傳入一個事件對象,如果路由發(fā)生改變就會觸發(fā)這個函數(shù),分別打印新舊URL,然后通過location.hash獲取到這個hash值。

而且,頁面是無刷新的

我們看一下瀏覽器

這樣看來,我們可以通過這樣的路由來讓我們的頁面發(fā)生變化,而且不用給后端發(fā)起請求。

還有就是hash值變化對應(yīng)的URL都會被瀏覽器記錄下來,這樣瀏覽器就能實現(xiàn)頁面的前進(jìn)和后退。而且這樣用起來非常的流暢,像使用APP一樣

history模式

history模式的URL中沒有#,它使用傳統(tǒng)的路由分發(fā)模式,就是說用戶在輸入一個URL時,服務(wù)器會接收這個請求,并解析這個URL,然后做出相應(yīng)的處理,也就是它向服務(wù)器發(fā)起了一個請求差不錯

先看demo

<body>
<button id="btn">點擊更改路徑</button>

<script>
const btn = document.getElementById('btn')

window.addEventListener('DOMContentLoaded', () => {
console.log('path: ', location.pathname);
})

btn.addEventListener('click', () => {
const state = {
pathName: 'index'
}
history.pushState(state, '', 'index') //切換路由
console.log('路由切換了: ', 'index');
})

window.onpopstate = (e) => {
console.log('onpopstate', e.state, location.pathname);
}
</script>
</body>

我在點擊btn的時候傳入一個路由對象,假設(shè)他是index,然后我用history.pushState()切換了路由,模擬了網(wǎng)頁路由的切換,一旦這個路由切換了,就會被監(jiān)聽到

然后我設(shè)想當(dāng)我們?yōu)g覽器前進(jìn)后退的時候也會被監(jiān)聽到,所以加了window.onpopstate這個API,傳入事件對象,監(jiān)聽它們路由的變化

我們看一下瀏覽器

當(dāng)我進(jìn)入的時候先打印出它的path: /history.html,然后我又點擊了哪個按鈕,切換了路由

然后我有按了瀏覽器的回退到了history這個路由,渲染了history這個頁面,然后我又點擊了一下前進(jìn)按鈕,它又渲染了index這個頁面

然后為什么第一次回退會打印null/history.html呢,因為它的路徑與對應(yīng)關(guān)系的狀態(tài),因為我在一開始的history沒有定義路徑,所以為null,后來能打印是因為我定義了路徑,換句話說就是,如果我后端沒有配置它的路徑,頁面容易出現(xiàn)404,也就是頁面丟失的狀態(tài)

總體來說吧,hash模式和history模式都有各自的優(yōu)勢和缺陷,如果是說哪一個好用,具體要看應(yīng)用場景


責(zé)任編輯:武曉燕 來源: 零零后程序員小三
相關(guān)推薦

2012-11-29 10:45:31

2022-01-26 00:36:24

vue組件化通信

2022-03-10 07:39:33

.NET部署模式

2010-05-04 18:10:07

路由器負(fù)載均衡

2021-12-14 19:40:07

Node路由Vue

2010-09-07 11:09:59

2024-06-06 08:32:52

.NET框架代碼

2009-06-29 18:11:40

JSP設(shè)計模式

2022-06-08 15:12:34

前端前端截圖

2021-11-11 08:20:47

Vue 技巧 開發(fā)工具

2009-11-11 16:36:19

路由協(xié)議介紹

2011-02-23 12:49:31

KonquerorEmbedded

2022-02-21 08:18:38

option編程模式

2010-08-26 15:15:18

DB2備份

2009-12-14 15:34:54

動態(tài)路由協(xié)議

2010-07-30 11:57:36

無線路由連接設(shè)置

2010-06-02 15:29:06

SVN版本控制

2021-10-09 09:15:01

Windows 11安全模式系統(tǒng)

2009-12-17 13:45:58

VS 2008外殼

2010-08-31 09:31:58

Silverlight
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧美性猛交一区二区三区精品 | 四虎永久免费影院 | 成人欧美一区二区三区在线观看 | 精品美女久久久 | 一级欧美视频 | 超碰在线97国产 | 免费视频二区 | 日韩欧美成人一区二区三区 | 婷婷久久网 | 亚洲综合久久精品 | 国产亚洲区 | 亚洲国产一| 久草免费在线 | av一区二区三区在线观看 | 久久99精品国产自在现线小黄鸭 | 欧美狠狠操 | 狠狠操狠狠搞 | 久久精品一级 | 久久国产亚洲 | 五月天激情综合网 | 国产精品久久久一区二区三区 | 九色porny自拍视频 | 欧美精品一 | 国产999精品久久久影片官网 | 日本不卡免费新一二三区 | 91精品国产91久久久久久最新 | 成人精品视频在线观看 | 精品一区二区三区免费视频 | 亚洲精品日韩视频 | 在线视频中文字幕 | av天天看 | 91精品国产手机 | 91av视频在线播放 | av在线免费观看网站 | 久草在线青青草 | 97人人草| 男女羞羞视频免费 | 热久久999 | 能免费看的av | 国产99免费视频 | 高清一区二区 |