https://www.runoob.com/vue2/vue-routing.html
Vue.js 路由
本章節(jié)我們將為大家介紹 Vue.js 路由。
Vue.js 路由允許我們通過不同的 URL 訪問不同的內(nèi)容。
通過 Vue.js 可以實現(xiàn)多視圖的單頁Web應(yīng)用(single page web application,SPA)。
Vue.js 路由需要載入?vue-router 庫
中文文檔地址:vue-router文檔。
安裝
1、直接下載 / CDN
https://unpkg.com/vue-router/dist/vue-router.js
NPM
推薦使用淘寶鏡像:
cnpm install vue-router
簡單實例
Vue.js + vue-router 可以很簡單的實現(xiàn)單頁應(yīng)用。
<router-link>?是一個組件,該組件用于設(shè)置一個導(dǎo)航鏈接,切換不同 HTML 內(nèi)容。?to?屬性為目標(biāo)地址, 即要顯示的內(nèi)容。
以下實例中我們將 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 組件來導(dǎo)航. -->? ? <!-- 通過傳入 `to` 屬性指定鏈接. -->? ? <!-- <router-link> 默認(rèn)會被渲染成一個 `<a>` 標(biāo)簽 -->? ? <router-link to="/foo">Go to Foo</router-link>? ? <router-link to="/bar">Go to Bar</router-link>? </p>? <!-- 路由出口 -->? <!-- 路由匹配到的組件將渲染在這里 -->? <router-view></router-view></div>
JavaScript 代碼
// 0. 如果使用模塊化機制編程,導(dǎo)入 Vue 和 VueRouter,要調(diào)用 Vue.use(VueRouter) // 1. 定義(路由)組件。// 可以從其他文件 import 進來const Foo = { template: '<div>foo</div>' }const Bar = { template: '<div>bar</div>' } // 2. 定義路由// 每個路由應(yīng)該映射一個組件。 其中"component" 可以是// 通過 Vue.extend() 創(chuàng)建的組件構(gòu)造器,// 或者,只是一個組件配置對象。// 我們晚點再討論嵌套路由。const routes = [? { path: '/foo', component: Foo },
? { path: '/bar', component: Bar }] // 3. 創(chuàng)建 router 實例,然后傳 `routes` 配置// 你還可以傳別的配置參數(shù), 不過先這么簡單著吧。const router = new VueRouter({? routes // (縮寫)相當(dāng)于 routes: routes}) // 4. 創(chuàng)建和掛載根實例。// 記得要通過 router 配置參數(shù)注入路由,// 從而讓整個應(yīng)用都有路由功能const app = new Vue({? router}).$mount('#app') // 現(xiàn)在,應(yīng)用已經(jīng)啟動了!
點擊過的導(dǎo)航鏈接都會加上樣式?class ="router-link-exact-active router-link-active"。
<router-link> 相關(guān)屬性
接下來我們可以了解下更多關(guān)于 <router-link> 的屬性。
to
表示目標(biāo)路由的鏈接。 當(dāng)被點擊后,內(nèi)部會立刻把 to 的值傳到 router.push(),所以這個值可以是一個字符串或者是描述目標(biāo)位置的對象。
<!-- 字符串 --><router-link to="home">Home</router-link><!-- 渲染結(jié)果 --><a href="home">Home</a><!-- 使用 v-bind 的 JS 表達(dá)式 --><router-link v-bind:to="'home'">Home</router-link><!-- 不寫 v-bind 也可以,就像綁定別的屬性一樣 --><router-link :to="'home'">Home</router-link><!-- 同上 --><router-link :to="{ path: 'home' }">Home</router-link><!-- 命名的路由 --><router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link><!-- 帶查詢參數(shù),下面的結(jié)果為 /register?plan=private --><router-link :to="{ path: 'register', query: { plan: 'private' }}">Register</router-link>
replace
設(shè)置 replace 屬性的話,當(dāng)點擊時,會調(diào)用 router.replace() 而不是 router.push(),導(dǎo)航后不會留下 history 記錄。
<router-link :to="{ path: '/abc'}" replace></router-link>
append
設(shè)置 append 屬性后,則在當(dāng)前 (相對) 路徑前添加基路徑。例如,我們從 /a 導(dǎo)航到一個相對路徑 b,如果沒有配置 append,則路徑為 /b,如果配了,則為 /a/b
<router-link :to="{ path: 'relative/path'}" append></router-link>
tag
有時候想要?<router-link>?渲染成某種標(biāo)簽,例如?<li>。 于是我們使用?tag?prop 類指定何種標(biāo)簽,同樣它還是會監(jiān)聽點擊,觸發(fā)導(dǎo)航。
<router-link to="/foo" tag="li">foo</router-link><!-- 渲染結(jié)果 --><li>foo</li>
active-class
設(shè)置 鏈接激活時使用的 CSS 類名??梢酝ㄟ^以下代碼來替代。
<style>? ._active{? ? ? background-color : red;? }</style><p>? <router-link v-bind:to = "{ path: '/route1'}" active-class = "_active">Router Link 1</router-link>? <router-link v-bind:to = "{ path: '/route2'}" tag = "span">Router Link 2</router-link></p>
注意這里?class?使用?active_class="_active"。
exact-active-class
配置當(dāng)鏈接被精確匹配的時候應(yīng)該激活的 class。可以通過以下代碼來替代。
<p>? <router-link v-bind:to = "{ path: '/route1'}" exact-active-class = "_active">Router Link 1</router-link>? <router-link v-bind:to = "{ path: '/route2'}" tag = "span">Router Link 2</router-link></p>
event
聲明可以用來觸發(fā)導(dǎo)航的事件??梢允且粋€字符串或是一個包含字符串的數(shù)組。
<router-link v-bind:to = "{ path: '/route1'}" event = "mouseover">Router Link 1</router-link>
以上代碼設(shè)置了 event 為 mouseover ,及在鼠標(biāo)移動到 Router Link 1 上時導(dǎo)航的 HTML 內(nèi)容會發(fā)生改變。
NPM 路由實例
接下來我們演示了一個使用 npm 簡單的路由實例,開始前,請先下載該實例源代碼:
你也可以在 Github 上下載:https://github.com/chrisvfritz/vue-2.0-simple-routing-example
下載完后,解壓該目錄,重命名目錄為 vue-demo,vu 并進入該目錄,執(zhí)行以下命令:
# 安裝依賴,使用淘寶資源命令 cnpmcnpm install# 啟動應(yīng)用,地址為 localhost:8080cnpm run dev
如果你需要發(fā)布到正式環(huán)境可以執(zhí)行以下命令:
cnpm run build
執(zhí)行成功后,訪問 http://localhost:8080 即可看到如下界面:
