最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue3中關(guān)于路由hash與History的設(shè)置

 更新時(shí)間:2022年08月05日 09:39:19   作者:一碼平串串  
這篇文章主要介紹了vue3中關(guān)于路由hash與History的設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

關(guān)于路由hash與History的設(shè)置

1、history 關(guān)鍵字:createWebHistory

import { createRouter, createWebHistory } from 'vue-router'
const routes = [ {
? path: '/userinfo',
? name: 'UserInfo',
? component: () => import('../views/UserInfo.vue')
}]
const router = createRouter({
? history: createWebHistory(process.env.BASE_URL),
? routes
})
export default router

2、hash 關(guān)鍵字:createWebHashHistory

import { createRouter, createWebHashHistory } from 'vue-router'
const routes = [{
? path: '/userinfo',
? name: 'UserInfo',
? component: () => import('../views/UserInfo.vue')
}]
const router = createRouter({
? history: createWebHashHistory(),
? routes
})
export default router

路由中hash和history模式區(qū)別

Vue-Router有兩種模式:hash模式和history模式。默認(rèn)的路由模式是hash模式。

1、hash模式

hash模式是開發(fā)中默認(rèn)的模式,也稱作錨點(diǎn),它的URL帶著一個(gè)#,例如:www.abc.com/#/vue,它的hash值就是#/vue。

特點(diǎn):

hash值會(huì)出現(xiàn)在URL里面,但是不會(huì)出現(xiàn)在HTTP請(qǐng)求中,對(duì)后端沒有影響。所以改變hash值不會(huì)重新加載頁面。

這種模式的瀏覽器支持度很好,低版本的IE瀏覽器也支持這種模式。

hash路由被稱為是前端路由,已經(jīng)成為SPA(單頁面應(yīng)用)的標(biāo)配。

原理:

hash模式的主要原理就是onhashchange()事件:

window.onhashchange = function(event){
?? ?console.log(event.oldURL, event.newURL);
?? ?let hash = location.hash.slice(1);
}

使用onhashchange()事件的好處就是,在頁面的hash值發(fā)生變化時(shí),無需向后端發(fā)起請(qǐng)求,window就可以監(jiān)聽事件的改變,并按規(guī)則加載相應(yīng)的代碼。除此之外,hash值變化對(duì)應(yīng)的URL都會(huì)被瀏覽器記錄下來,這樣瀏覽器就能實(shí)現(xiàn)頁面的前進(jìn)和后退。雖然是沒有請(qǐng)求后端服務(wù)器,但是頁面的hash值和對(duì)應(yīng)的URL關(guān)聯(lián)起來了。

獲取頁面hash變化的方法:

(1)監(jiān)聽$route的變化:

// 監(jiān)聽,當(dāng)路由發(fā)生變化的時(shí)候執(zhí)行
watch: {
? $route: {
? ? handler: function(val, oldVal){
? ? ? console.log(val);
? ? },
? ? // 深度觀察監(jiān)聽
? ? deep: true
? }
},

(2)通過window.location.hash讀取#值:

window.location.hash 的值可讀可寫,讀取來判斷狀態(tài)是否改變,寫入時(shí)可以在不重載網(wǎng)頁的前提下,添加一條歷史訪問記錄。

2、history模式

history模式直接指向history對(duì)象,它表示當(dāng)前窗口的瀏覽歷史,history對(duì)象保存了當(dāng)前窗口訪問過的所有頁面網(wǎng)址。URL中沒有#,它使用的是傳統(tǒng)的路由分發(fā)模式,即用戶在輸入一個(gè)URL時(shí),服務(wù)器會(huì)接收這個(gè)請(qǐng)求,并解析這個(gè)URL,然后做出相應(yīng)的邏輯處理。

特點(diǎn):

當(dāng)使用history模式時(shí),URL就像這樣:hhh.com/user/id。相比hash模式更加好看。

雖然history模式不需要#。但是,它也有自己的缺點(diǎn),就是在刷新頁面的時(shí)候,如果沒有相應(yīng)的路由或資源,就會(huì)刷出404來。

history api可以分為兩大部分,切換歷史狀態(tài) 和 修改歷史狀態(tài):

修改歷史狀態(tài):

包括了 HTML5 History Interface 中新增的 pushState() 和 replaceState() 方法,這兩個(gè)方法應(yīng)用于瀏覽器的歷史記錄棧,提供了對(duì)歷史記錄進(jìn)行修改的功能。只是當(dāng)他們進(jìn)行修改時(shí),雖然修改了url,但瀏覽器不會(huì)立即向后端發(fā)送請(qǐng)求。如果要做到改變url但又不刷新頁面的效果,就需要前端用上這兩個(gè)API。

切換歷史狀態(tài):

包括forward()、back()、go()三個(gè)方法,對(duì)應(yīng)瀏覽器的前進(jìn),后退,跳轉(zhuǎn)操作。

配置:

想要設(shè)置成history模式,就要進(jìn)行以下的配置(后端也要進(jìn)行配置):

const router = new VueRouter({
? mode: 'history',
? routes: [...]
})

3、兩者對(duì)比

調(diào)用 history.pushState() 相比于直接修改 hash,存在以下優(yōu)勢(shì):

pushState() 設(shè)置的新 URL 可以是與當(dāng)前 URL 同源的任意 URL;而 hash 只可修改 # 后面的部分,因此只能設(shè)置與當(dāng)前 URL 同文檔的 URL。

pushState() 設(shè)置的新 URL 可以與當(dāng)前 URL 一模一樣,這樣也會(huì)把記錄添加到棧中;而 hash 設(shè)置的新值必須與原來不一樣才會(huì)觸發(fā)動(dòng)作將記錄添加到棧中。

pushState() 通過 stateObject 參數(shù)可以添加任意類型的數(shù)據(jù)到記錄中;而 hash 只可添加短字符串。

pushState() 可額外設(shè)置 title 屬性供后續(xù)使用。

hash模式下,僅hash符號(hào)之前的url會(huì)被包含在請(qǐng)求中,后端如果沒有做到對(duì)路由的全覆蓋,也不會(huì)返回404錯(cuò)誤;history模式下,前端的url必須和實(shí)際向后端發(fā)起請(qǐng)求的url一致,如果沒有對(duì)用的路由處理,將返回404錯(cuò)誤。

小結(jié):

hash模式URL上帶有#,僅 hash 符號(hào)之前的內(nèi)容會(huì)被包含在請(qǐng)求中,如 www.hhh.com,因此對(duì)于后端來說,即使沒有做到對(duì)路由的全覆蓋,也不會(huì)返回 404 錯(cuò)誤。

hash模式URL上沒有#,前端的 URL 必須和實(shí)際向后端發(fā)起請(qǐng)求的 URL 一致,如 www.hhh.com/user/id。如果后端缺少對(duì) /use/id 的路由處理,將返回 404 錯(cuò)誤。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue.js修改el-popover組件顯示位置

    vue.js修改el-popover組件顯示位置

    el-popover是一個(gè)基于element-ui框架設(shè)計(jì)的,用于浮動(dòng)展示提示或菜單的UI組件,下面這篇文章主要給大家介紹了關(guān)于vue.js修改el-popover組件顯示位置的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • Vue 項(xiàng)目代理設(shè)置的優(yōu)化

    Vue 項(xiàng)目代理設(shè)置的優(yōu)化

    這篇文章主要介紹了Vue 項(xiàng)目代理設(shè)置的優(yōu)化功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2018-04-04
  • vue.js路由跳轉(zhuǎn)詳解

    vue.js路由跳轉(zhuǎn)詳解

    這篇文章主要為大家詳細(xì)介紹了vue.js路由跳轉(zhuǎn)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Vue命令式組件的編寫與應(yīng)用小結(jié)

    Vue命令式組件的編寫與應(yīng)用小結(jié)

    這篇文章主要介紹了Vue命令式組件的編寫與應(yīng)用小結(jié),在這篇文章中,我會(huì)帶你了解命令式組件的基本概念,并通過一些簡(jiǎn)單的示例來展示它們是如何工作的,需要的朋友可以參考下
    2024-03-03
  • Vue項(xiàng)目使用px2rem方法示例詳解

    Vue項(xiàng)目使用px2rem方法示例詳解

    這篇文章主要為大家介紹了Vue項(xiàng)目使用px2rem的方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • vue+element導(dǎo)航欄高亮顯示的解決方式

    vue+element導(dǎo)航欄高亮顯示的解決方式

    今天小編就為大家分享一篇vue+element導(dǎo)航欄高亮顯示的解決方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Vue利用computer解決單項(xiàng)數(shù)據(jù)流的問題詳解

    Vue利用computer解決單項(xiàng)數(shù)據(jù)流的問題詳解

    Vue 是一個(gè)非常流行和強(qiáng)大的前端框架,它讓我們可以用簡(jiǎn)潔和優(yōu)雅的方式來構(gòu)建用戶界面,今天我們來分享一個(gè) Vue 中非常經(jīng)典的問題,也是一個(gè)非常實(shí)用的技巧,希望對(duì)大家有所幫助
    2023-07-07
  • vue插件開發(fā)之使用pdf.js實(shí)現(xiàn)手機(jī)端在線預(yù)覽pdf文檔的方法

    vue插件開發(fā)之使用pdf.js實(shí)現(xiàn)手機(jī)端在線預(yù)覽pdf文檔的方法

    這篇文章主要介紹了vue插件開發(fā)之使用pdf.js實(shí)現(xiàn)手機(jī)端在線預(yù)覽pdf文檔的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-07-07
  • element-ui中樣式覆蓋問題的方法總結(jié)

    element-ui中樣式覆蓋問題的方法總結(jié)

    我們?cè)谑褂胑lement-ui的時(shí)候經(jīng)常會(huì)遇到需要修改組件默認(rèn)樣式,下面這篇文章主要給大家介紹了關(guān)于element-ui中樣式覆蓋問題的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • vue+echarts實(shí)現(xiàn)3D柱形圖

    vue+echarts實(shí)現(xiàn)3D柱形圖

    這篇文章主要為大家詳細(xì)介紹了vue+echarts實(shí)現(xiàn)3D柱形圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04

最新評(píng)論

金阳县| 泸州市| 三穗县| 尉犁县| 澄江县| 桦甸市| 莫力| 项城市| 朝阳市| 铜川市| 凤庆县| 石家庄市| 建水县| 潜江市| 江口县| 鹿泉市| 和林格尔县| 秦皇岛市| 武城县| 元江| 汉川市| 宁乡县| 石景山区| 门源| 和静县| 萨迦县| 伊川县| 盐源县| 永吉县| 邵东县| 桃园县| 通海县| 石家庄市| 清新县| 和硕县| 绥宁县| 扶余县| 汽车| 河曲县| 环江| 靖江市|