1. 程式人生 > >Vue路由History mode模式中頁面無法渲染的原因及解決

Vue路由History mode模式中頁面無法渲染的原因及解決

Vue下路由History mode導致頁面無法渲染的原因

用 Vue.js + vue-router 建立單頁應用,是非常簡單的。使用 Vue.js ,我們已經可以通過組合元件來組成應用程式,當你要把 vue-router 新增進來,我們需要做的是,將元件(components)對映到路由(routes),然後告訴 vue-router 在哪裡渲染它們。

一般開發的單頁應用的URL都會帶有#號的hash模式,因為整個應用本身而言就只有一個HTML,其他的都是通過router來渲染。如果因為業務需要,或者單純是覺得帶#號不美觀,那麼可以使用history模式,簡單而言就是在router的配置檔案index.js中新增如下一行程式碼:

history: mode

沒錯,這樣URL不再會有#號,你會發現整個位址列回到了你熟悉的那個樣子,不過,接下來介紹的就非常的重要了,可能很多剛入門的新人或多或少都會遇見這麼一兩個坑…

頁面無法渲染

這裡以我寫的一個專案為例子,當我開啟history模式的時候,我並沒有對路由進行任何處理,在Dev階段一切都是正常的,可是打包之後,訪問專案路徑:

sdp.driver.com/driver/

會發現頁面一片空白,但是靜態檔案都能夠正常的引用,因為使用了YII中的模組,所以除了域名之外,還會帶有driver模組名。一般很多人建立的專案都放在了根目錄下面,也就是:

sdp.driver.com

這樣的一種形式,沒問題。可是如果配置了模組,或者放置在了子資料夾下面,那麼就會出問題。其實,這是因為router無法找到路徑中的元件,所以也就無法渲染了。只需要修改router中的index.js,在每個path中加上你專案名稱就行了,這樣就能夠成功了。

index.js

最後的頁面效果:

效果圖

404錯誤

在History mode下,如果直接通過位址列訪問路徑,那麼會出現404錯誤,這是因為這是單頁應用(廢話)…其實是因為呼叫了history.pushState API 所以所有的跳轉之類的操作都是通過router來實現的,解決這個問題很簡單,只需要在後臺配置如果URL匹配不到任何靜態資源,就跳轉到預設的index.html。具體配置如下:

Apache

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteRule ^index\.html$ - [L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /index.html [L]
</IfModule>

nginx

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

關於每次點選連結都要重新整理頁面的問題

眾所周知,開發單頁應用就是因為那絲般順滑的體驗效果,如果每次點選都會重新整理頁面…
出現這個的原因是因為使用了window.location來跳轉,只需要使用使用router提供的方法,就能夠解決這個問題:

在main.js中配置中將router繫結到全域性

Vue.prototype.router = router;

之後都使用如下的方式來控制跳轉

this.router.push('driver/service');

好啦,這次關於Vue路由的“坑”就介紹到這裡了,以後會發表更多的優質文章,如果對你有所幫助,請點選贊,謝謝。

相關推薦

Vue路由History mode模式頁面無法渲染原因解決

Vue下路由History mode導致頁面無法渲染的原因 用 Vue.js + vue-router 建立單頁應用,是非常簡單的。使用 Vue.js ,我們已經可以通過組合元件來組成應用程式,當你要把 vue-router 新增進來,我們需要做的是,將元件(

wordpress更改“固定連結”模式後,頁面出現404原因解決方法

Nginx 解決方案: 在 /etc/nginx/config.d/mysit.conf檔案的 loction \ {} 中新增 if (-f $request_filename/index.html){ rewrite (.*) $1/index.html break; }

SpringBoot專案打成war包在tomcat啟動兩次原因解決方法

筆者新建了一個QQ群:571278542 。歡迎大家加入! tomcat重啟兩次的原因是appBase和Context中docBase設定的值導致的,只需要把appBase置為空,docBase寫專案的

Html產生塌陷的原因解決方法

產生塌陷的原因:由於沒有給父元素設定寬高,想通過子元素撐開寬高時,子元素又脫離了文件流使得子元素無法撐開文件流 脫離文件流的三種情況:   (1)float:給子元素設定浮動   (2)position:absolute;絕對定位   (3)positi

解決Mac版百度五筆刪除"百度拼音"電腦重啟後輸入法選單還存在的原因解決辦法

由於本人使用五筆打字,試了很多Mac上五筆輸入法,最後用來用去還是覺得百度五筆最好用(僅是個人喜好,不喜勿噴)。安裝完後,Mac版百度五筆預設帶有百度拼音: 列表中的輸入法過多,切換時,需要多按幾次才能切換到百度五筆,大大降低了輸入的效率,所以要把不使用的

oracle變異表觸發器ORA-04091錯誤原因解決方案

變異表是指激發觸發器的DML語句所操作的表 當對一個表建立行級觸發器時,有下列兩條限制: 1.不能讀取或修改任何觸發語句的變異表; 2.不能讀取或修改觸發表的一個約束表的PRIMARY   KEY,UNIQUE 或FOREIGN KEY關鍵字的列, 但  可以修改其他列

Vue路由History mode導致頁面無法渲染原因

tle 使用 history pro 階段 cond 引用 attribute 錯誤 用 Vue.js + vue-router 創建單頁應用,是非常簡單的。使用 Vue.js ,我們已經可以通過組合組件來組成應用程序,當你要把 vue-router 添加進來,我們需要做的

vue路由history模式重新整理404問題解決方案

vue單頁因微信分享和自動登入需要,對於URL中存在’#’的地址,處理起來比較坑。用history模式就不會存在這樣的問題。但是換成history模式,就會有個新的問題,就是頁面重新整理後,頁面就無法顯示了(404)。對於這個問題,我們只需要在伺服器配置如果UR

Vue history/hash模式打包頁面空白處理

 相信很多新手在history/hash模式下被坑的很慘,處理history模式下頁面打包空白,經測試ok export default new Router({ mode: 'history', // history模式 base: '/test', //專案

Vue路由History模式分析

# Vue路由History模式分析 `Vue-router`是`Vue`的核心元件,主要是作為`Vue`的路由管理器,`Vue-router`預設`hash`模式,通過引入`Vue-router`物件模組時配置`mode`屬性可以啟用`history`模式。 ## 描述 `Vue-router`的`has

openldap的Mirror mode模式的主主同步

調用 -a bsp sbin apach 但是 rest emc 源碼安裝 一.openldap簡介    LDAP是輕量目錄訪問協議,英文全稱是Lightweight Directory Access Protocol,一般都簡稱為LDAP。屬於開源集中賬號管理架構的實

vue 路由傳遞引數,重新整理頁面後引數丟失

在用vue做專案的時候,發現在新頁面重新整理後,上一頁面帶過來的引數會丟失,查閱資料才發現原來自己對params和query理解不透徹 下面是兩種傳參方法: 1、用 params 傳參,需要路由里加上這個引數 this.$router.push({name

VMware下網絡模式配置與IP地址無法正常獲取解決方案

什麽 應該 任務 互連 但我 intern 資料 for 互聯 目錄一 網絡配置中出現的錯誤及解決方案二 VMware下網絡配置的三種模式簡介 1、橋接模式(Bridged) 2、網絡地址轉化模式(NAT) 3、僅主機模式(host-only)一 網

手機端頁面在項目遇到的一些問題解決辦法

文本 phone 發生 box art 單選框 打電話 但是 href 前言:前段時間遇到點移動端的問題,網上查找點資料,看到一個挺不錯帖子,所以轉載分享給大家。 1.解決頁面使用 overflow: scroll 在 iOS 上滑動卡頓的問題? 首先你可能會給頁面的 ht

vue在html出現{{}}原因解決辦法

在剛開始接觸vue的時候,我們都是直接用<script>引入vue.js使用。沒有藉助vue-cli腳手架來構建專案。 對於一個初學者來說,跟著文件慢慢搬磚,使用vue進行資料繫結。 記得在最開始使用vue寫公司專案的時候,在頁面初始化化是,THML會閃現出{{}},當時測試問我有沒有解決辦法

vue遇見的一系列錯誤解決辦法

總結在vue中遇見的一系列錯誤並給出解決方法,持續更新... 在vue檔案中寫了script標籤對而不宣告export default {} 將會報此錯誤,如: <template> </template> <script> &l

15.VUE學習之-表單使用key唯一令牌解決表單值混亂問題

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <ti

vue.js數據可以在頁面渲染成功卻總是警告提示某個字段未定義

我們 小問題 報錯 read 生命 alt end https .net 最近在開發公司的一個後端管理系統,用的是比較流行的vue框架。在開發過程中,總是出現各種各樣的報錯問題,有警告的,有接口不通的,有自己馬虎造成的低級錯誤的等等,這些錯誤在一些老司機面前分分鐘解決,但今

Debian9無法連線Mariadb(Mysql)的原因解決方法

今天安裝好Debian9後,又繼續安裝了Mariadb(Mysql)資料庫。 此時剛剛安裝好資料庫,root還沒有設定密碼,因此應該可以不用密碼就應該可以登入, 但發現普通使用者用mysql -uroot登入時無法登入,只能用Linux的root賬戶登入才可以。 百度後發現

OEM以及oracle客戶端sys無法以sysdba登入解決案例

今早,公司某平臺進行效能測試,出現了資料庫連線用光,需要進行資料庫訪問瓶頸問題分析,在資料庫伺服器上順利安裝好了OEM,在window客戶端進行OEM登入時候,通過sys帳號以sysdba角色許可權登入,提示使用者名稱或密碼錯誤,直接到伺服器上以conn sys/****** as sysdba連線成功,