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

Vue-router中hash模式與history模式的區(qū)別詳解

 更新時間:2020年12月15日 15:44:22   作者:樹懶的夢想  
這篇文章主要給大家介紹了關于Vue-router中hash模式與history模式區(qū)別的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

VUE路由的hash模式與history模式的區(qū)別,這個也是面試常問的問題,這個題其實就是考驗你的開發(fā)經(jīng)驗是否屬實。

小白回答:hash模式url帶#號,history模式不帶#號。

大牛解答:

形式上:hash模式url里面永遠帶著#號,開發(fā)當中默認使用這個模式。如果用戶考慮url的規(guī)范那么就需要使用history模式,因為history模式?jīng)]有#號,是個正常的url,適合推廣宣傳;

功能上:比如我們在開發(fā)app的時候有分享頁面,那么這個分享出去的頁面就是用vue或是react做的,咱們把這個頁面分享到第三方的app里,有的app里面url是不允許帶有#號的,所以要將#號去除那么就要使用history模式,但是使用history模式還有一個問題就是,在訪問二級頁面的時候,做刷新操作,會出現(xiàn)404錯誤,那么就需要和后端人配合,讓他配置一下apache或是nginx的url重定向,重定向到你的首頁路由上就ok了

正題開始

為了達到改變視圖的同時不會向后端發(fā)出請求這一目的,瀏覽器當前提供了以下兩種支持:

hash模式:即地址欄 URL 中的 # 符號

比如這個 URL:http://www.abc.com/#/hello, hash 的值為 #/hello

它的特點在于:hash 雖然出現(xiàn)在 URL 中,但不會被包括在 HTTP 請求中,對后端完全沒有影響,因此改變 hash 不會重新加載頁面。

history模式:利用了 HTML5 History Interface 中新增的 pushState() 和 replaceState() 方法。(需要特定瀏覽器支持)

這兩個方法應用于瀏覽器的歷史記錄棧,在當前已有的 back()、forward()、go() 方法的基礎之上,這兩個方法提供了對歷史記錄進行修改的功能。當這兩個方法執(zhí)行修改時,只能改變當前地址欄的 URL,但瀏覽器不會向后端發(fā)送請求,也不會觸發(fā)popstate事件的執(zhí)行

因此可以說,hash 模式和 history 模式都屬于瀏覽器自身的特性,Vue-Router 只是利用了這兩個特性(通過調(diào)用瀏覽器提供的接口)來實現(xiàn)前端路由.

vue中的router有兩種模式:hash模式(默認)、history模式(需配置mode: 'history')

vue中的hash模式

即地址欄 URL 中的 # 符號,這個#就是hash符號,中文名哈希符或錨點

比如這個 URL:http://www.baidu.com/#/home,hash 的值為 #/home

它的特點在于:hash 雖然出現(xiàn)在 URL 中,但不會被包括在 HTTP 請求中,對后端完全沒有影響,因此改變 hash 不會重新加載頁面。

路由的哈希模式其實是利用了window.onhashchange事件,也就是說你的url中的哈希值(#后面的值)如果有變化,就會自動調(diào)用hashchange的監(jiān)聽事件,在hashchange的監(jiān)聽事件內(nèi)可以得到改變后的url,這樣能夠找到對應頁面進行加載

window.addEventListener('hashchange', () => {
  // 把改變后的url地址欄的url賦值給data的響應式數(shù)據(jù)current,調(diào)用router-view去加載對應的頁面
  this.data.current = window.location.hash.substr(1)
})

vue中history模式

HTML5 History Interface 中新增的兩個神器 pushState() 和 replaceState() 方法(需要特定瀏覽器支持),用來完成 URL 跳轉(zhuǎn)而無須重新加載頁面,不過這種模式還需要后臺配置支持。因為我們的應用是個單頁客戶端應用,如果后臺沒有正確的配置,就需要前端自己配置404頁面。

pushState() 和 replaceState() 這兩個神器的作用就是可以將url替換并且不刷新頁面,好比掛羊頭賣狗肉,http并沒有去請求服務器該路徑下的資源,一旦刷新就會暴露這個實際不存在的“羊頭”,顯示404(因為瀏覽器一旦刷新,就是去真正請求服務器資源)

那么如何去解決history模式下刷新報404的弊端呢,這就需要服務器端做點手腳,將不存在的路徑請求重定向到入口文件(index.html),前后端聯(lián)手,齊心協(xié)力做好“掛羊頭賣狗肉”的完美特效

pushState方法、replaceState方法,只能導致history對象發(fā)生變化,從而改變當前地址欄的 URL,但瀏覽器不會向后端發(fā)送請求,也不會觸發(fā)popstate事件的執(zhí)行

popstate事件的執(zhí)行是在點擊瀏覽器的前進后退按鈕的時候,才會被觸發(fā)

window.addEventListener('popstate', () => {
 this.data.current = window.location.pathname
})

使用場景

一般場景下,hash 和 history 都可以,除非你更在意顏值,# 符號夾雜在 URL 里看起來確實有些不太美麗。

如果不想要很丑的 hash,我們可以用路由的 history 模式,這種模式充分利用 history.pushState API 來完成URL 跳轉(zhuǎn)而無須重新加載頁面。 Vue-router 另外,根據(jù) Mozilla Develop Network 的介紹,調(diào)用 history.pushState() 相比于直接修改 hash,存在以下優(yōu)勢:

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

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

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

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

總結

傳統(tǒng)的路由指的是:當用戶訪問一個url時,對應的服務器會接收這個請求,然后解析url中的路徑,從而執(zhí)行對應的處理邏輯。這樣就完成了一次路由分發(fā)

而前端路由是不涉及服務器的,是前端利用hash或者HTML5的history API來實現(xiàn)的,一般用于不同內(nèi)容的展示和切換

到此這篇關于Vue-router中hash模式與history模式的區(qū)別詳解的文章就介紹到這了,更多相關Vue-router中hash模式與history模式區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • vue條件渲染列表渲染原理示例詳解

    vue條件渲染列表渲染原理示例詳解

    這篇文章主要為大家介紹了vue條件渲染列表渲染原理示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • Vue前端如何實現(xiàn)生成PDF并下載功能詳解

    Vue前端如何實現(xiàn)生成PDF并下載功能詳解

    在前端的崗位上經(jīng)常需要實現(xiàn)個生成個并下載的可視化圖表頁PDF文件,這篇文章主要給大家介紹了關于Vue前端如何實現(xiàn)生成PDF并下載功能的相關資料,需要的朋友可以參考下
    2021-10-10
  • Vue列表循環(huán)從指定下標開始的多種解決方案

    Vue列表循環(huán)從指定下標開始的多種解決方案

    這篇文章主要介紹了Vue列表循環(huán)從指定下標開始的多種方案,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • 如何用Vue3切換中英文顯示舉例說明

    如何用Vue3切換中英文顯示舉例說明

    這篇文章主要給大家介紹了關于如何用Vue3切換中英文顯示的相關資料,在Vue3中使用vue-i18n進行國際化設置,包括安裝、配置、在組件中使用$t方法獲取翻譯字符串,以及可選的動態(tài)加載語言包以提高性能,需要的朋友可以參考下
    2024-11-11
  • vue修改數(shù)據(jù)視圖更新原理學習

    vue修改數(shù)據(jù)視圖更新原理學習

    這篇文章主要為大家介紹了vue修改數(shù)據(jù)視圖更新原理學習,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • el-date-picker默認結束為當前時分秒的操作方法

    el-date-picker默認結束為當前時分秒的操作方法

    在element?ui中的日期時間選擇組件中默認是00:00,現(xiàn)在需求是點擊默認結束時間為當前時分秒,查了很多資料寫的都不準確?,今天給大家分享el-date-picker默認結束為當前時分秒的操作方法,感興趣的朋友一起看看吧
    2024-01-01
  • vue+elementUI下拉框回顯問題及解決方式

    vue+elementUI下拉框回顯問題及解決方式

    這篇文章主要介紹了vue+elementUI下拉框回顯問題及解決方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • vue實現(xiàn)組件之間傳值功能示例

    vue實現(xiàn)組件之間傳值功能示例

    這篇文章主要介紹了vue實現(xiàn)組件之間傳值功能,結合實例形式分析了vue.js父子組件之間相互傳值常見操作技巧,需要的朋友可以參考下
    2018-07-07
  • Vue中的assets和static目錄:使用場景及區(qū)別說明

    Vue中的assets和static目錄:使用場景及區(qū)別說明

    這篇文章主要介紹了Vue中的assets和static目錄:使用場景及區(qū)別說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • element表單el-form的label自適應寬度的實現(xiàn)

    element表單el-form的label自適應寬度的實現(xiàn)

    本文主要介紹了element表單el-form的label自適應寬度的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08

最新評論

共和县| 吉首市| 油尖旺区| 连南| 浦东新区| 阳原县| 铁力市| 葵青区| 南澳县| 建阳市| 平武县| 大兴区| 时尚| 龙岩市| 绥棱县| 扬中市| 铁力市| 山东| 怀柔区| 安康市| 永福县| 宁夏| 大洼县| 霍山县| 东丰县| 泽库县| 庆云县| 定南县| 甘谷县| 尚义县| 湘潭市| 辽阳市| 开平市| 崇文区| 集贤县| 兖州市| 台湾省| 隆尧县| 茌平县| 固镇县| 仪陇县|