Vue.js 教程
本章節(jié)我們將為大家介紹 Vue.js 路由。
Vue.js 路由允許我們通過(guò)不同的 URL 訪問(wèn)不同的內(nèi)容。
通過(guò) Vue.js 可以實(shí)現(xiàn)多視圖的單頁(yè)Web應(yīng)用(single page web application,SPA)。
Vue.js 路由需要載入 vue-router 庫(kù)
中文文檔地址:vue-router文檔。
https://unpkg.com/vue-router/dist/vue-router.js
推薦使用淘寶鏡像:
cnpm install vue-router
Vue.js + vue-router 可以很簡(jiǎn)單的實(shí)現(xiàn)單頁(yè)應(yīng)用。
<router-link> 是一個(gè)組件,該組件用于設(shè)置一個(gè)導(dǎo)航鏈接,切換不同 HTML 內(nèi)容。 to 屬性為目標(biāo)地址, 即要顯示的內(nèi)容。
以下實(shí)例中我們將 vue-router 加進(jìn)來(lái),然后配置組件和路由映射,再告訴 vue-router 在哪里渲染它們。代碼如下所示:
點(diǎn)擊過(guò)的導(dǎo)航鏈接都會(huì)加上樣式 class ="router-link-exact-active router-link-active"。
接下來(lái)我們可以了解下更多關(guān)于 <router-link> 的屬性。
表示目標(biāo)路由的鏈接。 當(dāng)被點(diǎn)擊后,內(nèi)部會(huì)立刻把 to 的值傳到 router.push(),所以這個(gè)值可以是一個(gè)字符串或者是描述目標(biāo)位置的對(duì)象。
<!-- 字符串 --> <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>
設(shè)置 replace 屬性的話,當(dāng)點(diǎn)擊時(shí),會(huì)調(diào)用 router.replace() 而不是 router.push(),導(dǎo)航后不會(huì)留下 history 記錄。
<router-link :to="{ path: '/abc'}" replace></router-link>
設(shè)置 append 屬性后,則在當(dāng)前 (相對(duì)) 路徑前添加其路徑。例如,我們從 /a 導(dǎo)航到一個(gè)相對(duì)路徑 b,如果沒(méi)有配置 append,則路徑為 /b,如果配了,則為 /a/b
<router-link :to="{ path: 'relative/path'}" append></router-link>
有時(shí)候想要 <router-link>
渲染成某種標(biāo)簽,例如 <li>
。
于是我們使用 tag
prop 類指定何種標(biāo)簽,同樣它還是會(huì)監(jiān)聽點(diǎn)擊,觸發(fā)導(dǎo)航。
<router-link to="/foo" tag="li">foo</router-link> <!-- 渲染結(jié)果 --> <li>foo</li>
設(shè)置 鏈接激活時(shí)使用的 CSS 類名??梢酝ㄟ^(guò)以下代碼來(lái)替代。
<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"。
配置當(dāng)鏈接被精確匹配的時(shí)候應(yīng)該激活的 class??梢酝ㄟ^(guò)以下代碼來(lái)替代。
<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>
聲明可以用來(lái)觸發(fā)導(dǎo)航的事件??梢允且粋€(gè)字符串或是一個(gè)包含字符串的數(shù)組。
<router-link v-bind:to = "{ path: '/route1'}" event = "mouseover">Router Link 1</router-link>
以上代碼設(shè)置了 event 為 mouseover ,及在鼠標(biāo)移動(dòng)到 Router Link 1 上時(shí)導(dǎo)航的 HTML 內(nèi)容會(huì)發(fā)生改變。
接下來(lái)我們演示了一個(gè)使用 npm 簡(jiǎn)單的路由實(shí)例,開始前,請(qǐng)先下載該實(shí)例源代碼:
路由實(shí)例你也可以在 Github 上下載:https://github.com/chrisvfritz/vue-2.0-simple-routing-example
下載完后,解壓該目錄,重命名目錄為 vue-demo,vu 并進(jìn)入該目錄,執(zhí)行以下命令:
# 安裝依賴,使用淘寶資源命令 cnpm cnpm install # 啟動(dòng)應(yīng)用,地址為 localhost:8080 cnpm run dev
如果你需要發(fā)布到正式環(huán)境可以執(zhí)行以下命令:
cnpm run build
執(zhí)行成功后,訪問(wèn) http://localhost:8080 即可看到如下界面: