Vue Router
是 Vue.js
官方的路由管理器。它和 Vue.js
的核心深度集成,讓構建單頁面應用變得易如反掌。包含的功能有:css
Vue.js
過渡系統的視圖過渡效果CSS class
的連接HTML5
歷史模式或 hash
模式,在 IE9
中自動降級安裝命令html
npm install vue-router --save
若是在一個模塊化工程中使用它,必需要經過 Vue.use()
明確地安裝路由功能:vue
import Vue from 'vue' import VueRouter from 'vue-router' Vue.use(VueRouter)
模塊化使用
以前咱們使用腳手架vue-cli
建立項目時,實際已經配置好了router
,建立完項目後,在項目根目錄下會有一個router
文件夾,router
下有一個index.js
文件,內容以下:vue-router
import Vue from "vue"; import VueRouter from "vue-router"; import Home from "../views/Home.vue"; // 1. 當咱們使用其餘插件的時候,就必須使用Vue.use安裝插件 Vue.use(VueRouter); // 2. 定義路由,每一個路由應該映射一個組件 const routes = [ { path: "/", name: "Home", component: Home, }, { path: "/about", name: "About", component: About }, ]; // 3. 建立router實例 const router = new VueRouter({ // 配置路由和組件之間的應用關係 routes, // (縮寫) 至關於 routes: routes }); // 4. 導出router對象,而後在main.js中引用 export default router;
這個文件是專門配置路由的,最後將router
對象導出後,咱們在項目的main.js
中引用便可vue-cli
import Vue from "vue"; import App from "./App.vue"; import router from "./router"; Vue.config.productionTip = false; new Vue({ router, // 在vue實例中添加router對象,就可使用路由了 render: (h) => h(App), }).$mount("#app");
咱們的2個組件代碼About
和Home
代碼以下:npm
// About.vue <template> <div class="about"> <h1>About</h1> </div> </template> <script> export default { name: "About" } </script> <style scoped> </style> // Home.vue <template> <div class="home"> <h1>Home</h1> </div> </template> <script> export default { name: "Home", }; </script> <style scoped> </style>
最後咱們在App.vue
中,寫入以下代碼:瀏覽器
<template> <div id="app"> <router-link to="/">首頁</router-link> <router-link to="/about">關於</router-link> <router-view></router-view> </div> </template> <style lang="scss"> </style>
使用<router-link>
來加載連接,而後使用to
表示跳轉的連接。最終會把<router-link>
渲染成<a>
標籤。<router-view>
是路由的出口,也就是相應url
下的代碼會被渲染到這個地方來。
app
可是當咱們啓動程序,訪問頁面的時候,url
地址上會出現#
這是由於vue-router
默認 hash
模式 —— 使用 URL
的 hash
來模擬一個完整的 URL
,因而當 URL
改變時,頁面不會從新加載。
若是不想要很醜的 hash
,咱們能夠用路由的 history
模式,這種模式充分利用 history.pushState API
來完成 URL
跳轉而無須從新加載頁面。ide
const router = new VueRouter({ mode: 'history', routes: [...] })
咱們只需在router
文件夾下的index.js
中添加mode
爲history
便可,以後從新訪問,http://localhost:8080/
就不會有#
號了模塊化
注意:history
模式還須要後臺配置支持。由於咱們的應用是個單頁客戶端應用,若是後臺沒有正確的配置,當用戶在瀏覽器直接訪問其餘url
地址就會返回 404,這就很差看了。
因此呢,你要在服務端增長一個覆蓋全部狀況的候選資源:若是 URL
匹配不到任何靜態資源,則應該返回同一個 index.html
頁面,這個頁面就是你 app
依賴的頁面。