使用 Vue.js 時,我們就已經把元件組合成一個應用了,當我們要把 vue-router 加進來,只需要配置元件和路由對映,然後告訴 vue-router 在哪裡渲染它們。
先來看一下官方提供的最簡單的例子:
HTML
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
<div id="app">
<h1>Hello App!</h1>
<p>
<!-- 使用 router-link 元件來導航. -->
<!-- 通過傳入 `to` 屬性指定連結. -->
<!-- <router-link> 預設會被渲染成一個 `<a>` 標籤 -->
<router-link to="/foo">Go to Foo</router-link>
<router-link to="/bar">Go to Bar</router-link>
</p>
<!-- 路由出口 -->
<!-- 路由匹配到的元件將渲染在這裡 -->
<router-view></router-view>
</div>
從HTML檔案裡面我們需要學會的是:
- <router-link>標籤是我們要跳轉的連結,to=””是必須的屬性,雙引號中的內容是我們接下來在JS檔案中定義的路由path。
- <router-view>標籤是展示我們匹配到的元件的區域。
JavaScript
// 0. 如果使用模組化機制程式設計,匯入Vue和VueRouter,要呼叫 Vue.use(VueRouter)
// 1. 定義(路由)元件。
// 也可以從其他檔案 import 進來
const Foo = { template: `<div>foo</div>` }
const Bar = { template: `<div>bar</div>` }
// 2. 定義路由
// 每個路由應該對映一個元件。 其中"component" 可以是
// 通過 Vue.extend() 建立的元件構造器,
// 或者,只是一個元件配置物件。
const routes = [
{ path: `/foo`, component: Foo },
{ path: `/bar`, component: Bar }
]
// 3. 建立 router 例項,然後傳 `routes` 配置
// 你還可以傳別的配置引數, 不過先這麼簡單著吧。
const router = new VueRouter({
routes // (縮寫)相當於 routes: routes
})
// 4. 建立和掛載根例項。
// 記得要通過 router 配置引數注入路由,
// 從而讓整個應用都有路由功能
const app = new Vue({
router
}).$mount(`#app`)
// 現在,應用已經啟動了!
JavaScript檔案主要做的事情是:
- 定義路由列表,即routes。
- 建立router例項及router配置,即router。
- 建立和掛載根例項。
以上只是教我們用最簡單的方法使用vue-router。但實際開發過程中,首先我們的vue元件顯然不會只有一個template模板這麼簡單,會用到vue的單檔案元件;其次我們通常會希望<router-view>的範圍是整個頁面,而不是像現在這樣一直有幾個礙眼的導航存在於頁面上,這就需要先定義好預設狀態下<router-view>顯示的內容。
既然是單頁應用(SPA),那麼整個專案有以下三個檔案是必要的:
- 一個html檔案:index.html
- 一個webpack打包時的入口js檔案:main.js
- 一個根vue元件,作為其他元件的掛載點:app.vue
另外還有兩個自定義元件:homepage.vue和chat.vue。我們希望的結果是他們之間互相跳轉。
下面看下這幾個檔案的具體內容:
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Vue.js v2</title>
</head>
<body>
<!--因為我們用App.vue作為根元件,這裡只需要寫一個渲染用的掛載元素#application即可-->
<div id="application"></div>
<!--這裡的dist目錄是webpack打包後的js檔案的路徑-->
<script src="dist/main.js"></script>
</body>
</html>
main.js
這裡我們選擇把路由配置也寫到main.js中,你也可以寫到一個單獨的router.js中再引入到main.js中。
//引入vue、vue-router和根元件app.vue
import Vue from `vue`
import VueRouter from `vue-router`
import App from `./components/app.vue`
Vue.use(VueRouter)
// 引入自定義元件
import HomePage from `./components/homepage.vue`
import Chat from `./components/chat/chat.vue`
//定義路由
const routes = [
//這裡 path: `/` 代表應用首頁顯示的內容
{ path: `/`, component: HomePage },
{ path: `/chat`, component: Chat }
];
//建立router例項
const router = new VueRouter({
//mode指定路由模式,預設`hash`,另一種可選的模式是`history`
mode: `hash`,
routes,
});
new Vue({
el: `#application`,
router,
render: h => h(App) //用render函式渲染引入的元件App.vue到index.html中的#application元素中
})
app.vue
<template lang="html">
<div id="app">
<!--這裡是元件的渲染區域-->
<router-view></router-view>
</div>
</template>
<script>
export default {
data () {
return {
}
},
}
</script>
自定義元件 homepage.vue
這個元件的內容也是進入應用預設展示的頁面內容。
<template>
<div>
<h1>homepage</h1>
<router-link to="/chat">Go to chat</router-link>
</div>
</template>
自定義元件 chat.vue
<template>
<div>
<h1>Chat</h1>
<router-link to="/">Go to homepage</router-link>
</div>
</template>
寫完後你會發現這兩個頁面是互相跳轉的,沒錯,就是這樣。
一般我們會把路由資訊routes提取到一個單獨的檔案中,像這樣:
路由資訊提取到單獨檔案中 route-config.js:
import HomePage from `./components/homepage.vue`
import Chat from `./components/chat/chat.vue`
export default [
{
path: `/`,
component: HomePage
},
{
path: `/chat`,
component: Chat
}
];
然後在main.js
中引入: import routes from `./route-config.js`
就可以了。
參考文獻:
- vue-router 2官方文件: http://router.vuejs.org/zh-cn/
- Vue-router2.0學習筆記: https://segmentfault.com/a/11…
- vue2.0構建單頁應用最佳實戰: https://segmentfault.com/a/11…
- 一個完整的vue應用 ( vuex+vue-router ) 起手: https://segmentfault.com/a/11…