github項目地址請點這裏。html
使用 Vue.js 時,咱們就已經把組件組合成一個應用了,當咱們要把 vue-router 加進來,只須要配置組件和路由映射,而後告訴 vue-router 在哪裏渲染它們。vue
先來看一下官方提供的最簡單的例子:webpack
<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文件裏面咱們須要學會的是:git
// 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文件主要作的事情是:github
以上只是教咱們用最簡單的方法使用vue-router。但實際開發過程當中,首先咱們的vue組件顯然不會只有一個template模板這麼簡單,會用到vue的單文件組件;其次咱們一般會但願<router-view>的範圍是整個頁面,而不是像如今這樣一直有幾個礙眼的導航存在於頁面上,這就須要先定義好默認狀態下<router-view>顯示的內容。web
既然是單頁應用(SPA),那麼整個項目有如下三個文件是必要的:vue-router
另外還有兩個自定義組件:homepage.vue和chat.vue。咱們但願的結果是他們之間互相跳轉。vuex
下面看下這幾個文件的具體內容:編程
<!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中,你也能夠寫到一個單獨的router.js中再引入到main.js中。segmentfault
//引入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元素中 })
<template lang="html"> <div id="app"> <!--這裏是組件的渲染區域--> <router-view></router-view> </div> </template> <script> export default { data () { return { } }, } </script>
這個組件的內容也是進入應用默認展現的頁面內容。
<template> <div> <h1>homepage</h1> <router-link to="/chat">Go to chat</router-link> </div> </template>
<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'
就能夠了。