介紹
Vue Router
是 Vue.js
官方的路由管理器。它和 Vue.js
的核心深度整合,讓構建單頁面應用變得易如反掌。包含的功能有:
- 巢狀的路由/檢視表
- 模組化的、基於元件的路由配置
- 路由引數、查詢、萬用字元
- 基於
Vue.js
過渡系統的檢視過渡效果 - 細粒度的導航控制
- 帶有自動啟用的
CSS class
的連結 HTML5
歷史模式或hash
模式,在IE9
中自動降級- 自定義的滾動條行為
安裝
安裝命令
npm install vue-router --save
如果在一個模組化工程中使用它,必須要通過 Vue.use()
明確地安裝路由功能:
import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)
模組化使用
之前我們使用腳手架vue-cli
建立專案時,實際已經配置好了router
,建立完專案後,在專案根目錄下會有一個router
資料夾,router
下有一個index.js
檔案,內容如下:
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
中引用即可
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
程式碼如下:
// 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
下的程式碼會被渲染到這個地方來。
HTML5 history模式
但是當我們啟動程式,訪問頁面的時候,url
地址上會出現#
這是因為vue-router
預設 hash
模式 —— 使用 URL
的 hash
來模擬一個完整的 URL
,於是當 URL
改變時,頁面不會重新載入。
如果不想要很醜的 hash
,我們可以用路由的 history
模式,這種模式充分利用 history.pushState API
來完成 URL
跳轉而無須重新載入頁面。
const router = new VueRouter({
mode: 'history',
routes: [...]
})
我們只需在router
資料夾下的index.js
中新增mode
為history
即可,之後重新訪問,http://localhost:8080/
就不會有#
號了
注意:history
模式還需要後臺配置支援。因為我們的應用是個單頁客戶端應用,如果後臺沒有正確的配置,當使用者在瀏覽器直接訪問其他url
地址就會返回 404,這就不好看了。
所以呢,你要在服務端增加一個覆蓋所有情況的候選資源:如果 URL
匹配不到任何靜態資源,則應該返回同一個 index.html
頁面,這個頁面就是你 app
依賴的頁面。