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

Vue Router history模式的配置方法及其原理

 更新時間:2019年05月30日 17:08:30   作者:ryougifujino  
這篇文章主要介紹了Vue Router history模式的配置方法及其原理,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下

vue-router分為 hashhistory模式,前者為其默認模式,url的表現(xiàn)形式為 http://yoursite.com#home,比較難看。后者的url表現(xiàn)形式為 http://yoursite.com/home,比較美觀。

但如果要使用 history模式,我們需要在后端進行額外配置。本文將討論如何配置以及為什么要這樣配置。

history模式的配置方法

我們來看看官方文檔是教我們怎么配置的:HTML5 History 模式。

首先要將 mode設(shè)置為 history

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

然后設(shè)置后端(這里采用的nginx):

location / {
 try_files $uri $uri/ /index.html;
}

然后就......沒了!顯然官方的教程講的比較簡略,并且我們參照這個教程實際上還是會遇到一些問題。

history模式的配置實踐及原理

強烈建議:閱讀這部分之前,先看一下nginx的這部分文檔和 這部分文檔。

既然官方文檔教我們這樣做了,我們就按照它說的來實踐一下。

只配置前端的情況

首先,我們將 mode設(shè)置為 history,但不配置后端。然后,假如我們的路由是長這個樣子的:

const routes = [
  {path: '/home', component: Home},
  {path: '/', redirect: '/home'}
];

我們用nginx部署項目,然后在地址欄輸入 http://localhost:8080(這里配置的端口是8080),你會發(fā)現(xiàn)地址欄之后會變?yōu)?http://localhost:8080/home,并且 看起來一切正常, 似乎路由也可以正常切換而不會發(fā)生其他問題(實際上會發(fā)生問題,后面會進行討論)??雌饋砗孟癫恍枰垂倬W(wǎng)告訴我們的那樣配置后端也能實現(xiàn) history模式,但如果你直接在地址欄輸入 http://localhost:8080/home,你會發(fā)現(xiàn)你獲得了一個404頁面。

那么 http://localhost:8080為什么可以(部分)正常顯示呢?道理其實很簡單,你訪問 http://localhost:8080時,靜態(tài)服務(wù)器(這里是nginx)會默認去目標目錄(這里為 locationroot所指定的目錄)下尋找 index.html(這是nginx在端口后沒有額外路徑時的默認行為),目標目錄下有這個文件嗎?有!然后靜態(tài)服務(wù)器返回給你這個文件,配合 vue-router進行轉(zhuǎn)發(fā),自然可以(部分)正常顯示。

但如果直接訪問 http://localhost:8080/home,靜態(tài)服務(wù)器會去目標目錄下尋找 home文件,目標目錄下有這個文件嗎?沒有!所以自然就404了。

配置后端

為了達到直接訪問 http://localhost:8080/home也可以成功的目的,我們需要對后端(這里即nginx)進行一些配置。

首先想想,要怎樣才能達到這個目的呢?

在傳統(tǒng)的 hash模式中( http://localhost:8080#home),即使不需要配置,靜態(tài)服務(wù)器始終會去尋找 index.html并返回給我們,然后 vue-router會獲取 #后面的字符作為參數(shù),對前端頁面進行變換。

類比一下,在 history模式中,我們所想要的情況就是:輸入 http://localhost:8080/home,但最終返回的也是 index.html,然后 vue-router會獲取 home作為參數(shù),對前端頁面進行變換。那么在nginx中,誰能做到這件事呢?答案就是 try_files。

首先看一下try_files的語法: try_files file ... uri;

然后看一下官方文檔對它的介紹:

Checks the existence of files in the specified order and uses the first found file for request processing; the processing is performed in the current context. The path to a file is constructed from the file parameter according to the root and alias directives. It is possible to check directory's existence by specifying a slash at the end of a name, e.g. “$uri/”. If none of the files were found, an internal redirect to the uri specified in the last parameter is made.

大意就是它會按照 try_files后面的參數(shù)依次去匹配 root中對應(yīng)的文件或文件夾。如果匹配到的是一個文件,那么將返回這個文件;如果匹配到的是一個文件夾,那么將返回這個文件夾中 index指令指定的文件。最后一個 uri參數(shù)將作為前面沒有匹配到的fallback。(注意 try_files指令至少需要兩個參數(shù))

拿我自己的網(wǎng)站舉個例子:

location / { 
    root      /data/www/rf-blog-web; 
    index      index.html; 
    try_files    $uri $uri/ /index.html; 
}

$uri是nginx中的變量,比如我訪問的網(wǎng)址是 http://localhost:8080/home,那么它就代表的 /home

rf-blog-web這個目錄中,沒有子目錄,只有一個 index.html和一些壓縮后的名稱是hash值的.js文件。當我們請求 http://localhost:8080/home這個地址時,首先查找有無 home這個文件,沒有;再查找有無 home目錄,也沒有。所以最終會定位到第三個參數(shù)從而返回 index.html,按照這個規(guī)則,所有路由里的url路徑最后都會定位到 index.html。 vue-router再獲取參數(shù)進行前端頁面的變換,至此,我們已經(jīng)可以通過 http://localhost:8080/home這個地址進行成功地訪問了。

$uri這個參數(shù)的作用其實是匹配那些.js文件用的,而 $uri/在這個例子中并沒有多大用,實際上是可以去掉的。

history模式下可能會遇到的問題及解決方案

在將我的項目(在路由中用了懶加載)改為 history模式的過程中,有時候發(fā)現(xiàn)會出現(xiàn)chunk加載出錯的情況,打開chrome的network發(fā)現(xiàn)那個chunk加載404了,是因為請求的url中多了一層路徑。我在這里發(fā)現(xiàn)了解決方案。

LinusBorg說,因為在 history模式中切換路由時,我們是真正改變了頁面的url路徑,所以webpack的runtime會認為它位于 example.com/some/path。如果 publicPath是設(shè)置的相對路徑,那么webpack加載chunk時可能會變成 example.com/some/path/static/js/3.js這樣的路徑,然而chunk的真正路徑是 example.com/static/js/3.js,所以我們需要將 publicPath設(shè)置為絕對路徑( publicPath: '/')來解決這個問題。

總結(jié)

以上所述是小編給大家介紹的Vue Router history模式的配置方法及其原理,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 淺談vue+webpack項目調(diào)試方法步驟

    淺談vue+webpack項目調(diào)試方法步驟

    本篇文章主要介紹了淺談vue+webpack項目調(diào)試方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • vue實現(xiàn)父子組件之間的通信以及兄弟組件的通信功能示例

    vue實現(xiàn)父子組件之間的通信以及兄弟組件的通信功能示例

    這篇文章主要介紹了vue實現(xiàn)父子組件之間的通信以及兄弟組件的通信功能,結(jié)合實例形式分析了vue.js組件間通信相關(guān)操作技巧,需要的朋友可以參考下
    2019-01-01
  • 在Vue中使用Compass的方法

    在Vue中使用Compass的方法

    本篇文章主要介紹了在Vue中使用Compass的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • Vue 解決父組件跳轉(zhuǎn)子路由后當前導(dǎo)航active樣式消失問題

    Vue 解決父組件跳轉(zhuǎn)子路由后當前導(dǎo)航active樣式消失問題

    這篇文章主要介紹了Vue 解決父組件跳轉(zhuǎn)子路由后當前導(dǎo)航active樣式消失問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • vue3+ts重復(fù)參數(shù)提取成方法多處調(diào)用以及字段無值時不傳字段給后端問題

    vue3+ts重復(fù)參數(shù)提取成方法多處調(diào)用以及字段無值時不傳字段給后端問題

    在進行API開發(fā)時,優(yōu)化參數(shù)傳遞是一個重要的考量,傳統(tǒng)方法中,即使參數(shù)值為空,也會被包含在請求中發(fā)送給后端,這可能會導(dǎo)致不必要的數(shù)據(jù)處理,而優(yōu)化后的方法則只會傳遞那些實際有值的字段,從而提高數(shù)據(jù)傳輸?shù)挠行院秃蠖颂幚淼男?/div> 2024-10-10
  • vue-print-nb只打印一頁解決方法示例

    vue-print-nb只打印一頁解決方法示例

    這篇文章主要為大家介紹了vue-print-nb只打印一頁解決方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪<BR>
    2023-11-11
  • vue單頁面如何設(shè)置高度100%全屏

    vue單頁面如何設(shè)置高度100%全屏

    這篇文章主要介紹了vue單頁面如何設(shè)置高度100%全屏,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vuex之理解Store的用法

    Vuex之理解Store的用法

    本篇文章主要介紹了Vuex之理解Store的用法,Store類就是存儲數(shù)據(jù)和管理數(shù)據(jù)方法的倉庫,實現(xiàn)方式是將數(shù)據(jù)和方法已對象形式傳入其實例中
    2017-04-04
  • vue+animation實現(xiàn)翻頁動畫

    vue+animation實現(xiàn)翻頁動畫

    這篇文章主要為大家詳細介紹了vue+animation實現(xiàn)翻頁動畫,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • Vue2利用echarts繪制折線圖,餅圖和大圖

    Vue2利用echarts繪制折線圖,餅圖和大圖

    這篇文章主要為大家詳細介紹了Vue2如何利用echarts繪制折線圖,餅圖和大圖,文中的示例代碼簡潔易懂,具有一定的借鑒價值,需要的可以參考一下
    2023-04-04

最新評論

深水埗区| 郴州市| 黑山县| 宜章县| 双牌县| 云阳县| 革吉县| 东乌| 民乐县| 玉屏| 敦煌市| 汉中市| 炉霍县| 自治县| 红原县| 颍上县| 铅山县| 东丰县| 长宁区| 天峻县| 登封市| 鹿泉市| 南澳县| 迁安市| 信阳市| 乌鲁木齐县| 浦县| 丹东市| 揭东县| 门头沟区| 南雄市| 同心县| 太谷县| 临清市| 革吉县| 尼勒克县| 绍兴县| 黔东| 金湖县| 登封市| 凌云县|