
- VueJS 教程
- VueJS - 首頁
- VueJS - 概述
- VueJS - 環境設定
- VueJS - 簡介
- VueJS - 例項
- VueJS - 模板
- VueJS - 元件
- VueJS - 計算屬性
- VueJS - 偵聽器
- VueJS - 資料繫結
- VueJS - 事件
- VueJS - 渲染
- VueJS - 過渡與動畫
- VueJS - 指令
- VueJS - 路由
- VueJS - 混入
- VueJS - 渲染函式
- VueJS - 響應式介面
- VueJS - 示例
- VueJS 有用資源
- VueJS - 快速指南
- VueJS - 有用資源
- VueJS - 討論
VueJS - 路由
VueJS 沒有內建的路由功能。我們需要遵循一些額外的步驟來安裝它。
從 CDN 直接下載
最新版本的 vue-router 可在 https://unpkg.com/vue-router/dist/vue-router.js 獲取
Unpkg.com 提供基於 npm 的 cdn 連結。以上鍊接始終更新到最新版本。我們可以下載並託管它,並像下面這樣使用指令碼標籤與 vue.js 一起使用:
<script src = "/path/to/vue.js"></script> <script src = "/path/to/vue-router.js"></script>
使用 NPM
執行以下命令安裝 vue-router。
npm install vue-router
使用 GitHub
我們可以從 GitHub 克隆儲存庫,如下所示:
git clone https://github.com/vuejs/vue-router.git node_modules/vue-router cd node_modules/vue-router npm install npm run build
讓我們從一個使用 vue-router.js 的簡單示例開始。
示例
<html> <head> <title>VueJs Instance</title> <script type = "text/javascript" src = "js/vue.js"></script> <script type = "text/javascript" src = "js/vue-router.js"></script> </head> <body> <div id = "app"> <h1>Routing Example</h1> <p> <router-link to = "/route1">Router Link 1</router-link> <router-link to = "/route2">Router Link 2</router-link> </p> <!-- route outlet --> <!-- component matched by the route will render here --> <router-view></router-view> </div> <script type = "text/javascript"> const Route1 = { template: '<div style = "border-radius:20px;background-color:cyan;width:200px;height:50px;margin:10px;font-size:25px;padding:10px;">This is router 1</div>' } const Route2 = { template: '<div style = "border-radius:20px;background-color:green;width:200px;height:50px;margin:10px;font-size:25px;padding:10px;">This is router 2</div>' } const routes = [ { path: '/route1', component: Route1 }, { path: '/route2', component: Route2 } ]; const router = new VueRouter({ routes // short for `routes: routes` }); var vm = new Vue({ el: '#app', router }); </script> </body> </html>
輸出


要開始路由,我們需要新增 vue-router.js 檔案。從 https://unpkg.com/vue-router/dist/vue-router.js 獲取程式碼並將其儲存在檔案 vue-router.js 中。
指令碼在 vue.js 之後新增,如下所示:
<script type = "text/javascript" src = "js/vue.js"></script> <script type = "text/javascript" src = "js/vue-router.js"></script>
在 body 部分,路由連結定義如下:
<p> <router-link to = "/route1">Router Link 1</router-link> <router-link to = "/route2">Router Link 2</router-link> </p>
<router-link> 是一個用於導航到要顯示給使用者的 HTML 內容的元件。to 屬性是目標,即獲取要顯示內容的原始檔。
在上面的程式碼片段中,我們建立了兩個路由連結。
看一下指令碼部分,其中初始化了路由器。建立了兩個常量,如下所示:
const Route1 = { template: '<div style = "border-radius:20px;background-color:cyan;width:200px;height:50px;margin:10px;font-size:25px;padding:10px;">This is router 1</div>' }; const Route2 = { template: '<div style = "border-radius:20px;background-color:green;width:200px;height:50px;margin:10px;font-size:25px;padding:10px;">This is router 2</div>' }
它們有模板,當點選路由連結時需要顯示。
接下來是 routes 常量,它定義了要在 URL 中顯示的路徑。
const routes = [ { path: '/route1', component: Route1 }, { path: '/route2', component: Route2 } ];
路由定義路徑和元件。當用戶點選路由連結時,路徑,即/route1,將顯示在 URL 中。
元件獲取要顯示的模板名稱。路由中的路徑需要與路由連結的 to 屬性匹配。
例如,<router-link to = ”path here”></router-link>
接下來,使用以下程式碼片段建立 VueRouter 例項。
const router = new VueRouter({ routes // short for `routes: routes` });
VueRouter 建構函式將路由作為引數。路由物件使用以下程式碼片段分配給主 vue 例項。
var vm = new Vue({ el: '#app', router });
執行示例並在瀏覽器中檢視顯示。在檢查和檢查路由連結時,我們會發現它會向活動元素新增類,如下面的螢幕截圖所示。

新增的類是class = “router-link-exact-active router-link-active”。活動連結獲取如上圖所示的類。需要注意的另一件事是,<router-link> 呈現為 a 標籤。
路由連結的屬性
讓我們看看要傳遞給 <router-link> 的更多屬性。
to
這是給 <router-link> 的目標路徑。當點選時,to 的值將內部傳遞給 router.push()。該值需要是字串或位置物件。使用物件時,我們需要像示例 2 中所示那樣繫結它。
e.g. 1: <router-link to = "/route1">Router Link 1</router-link> renders as <a href = ”#/route”>Router Link </a> e.g. 2: <router-link v-bind:to = "{path:'/route1'}">Router Link 1</router-link> e.g. 3: <router-link v-bind:to = "{path:'/route1', query: { name: 'Tery' }}">Router Link 1</router-link>//router link with query string.
以下是示例 3 的輸出。

在 URL 路徑中,name = Tery 是查詢字串的一部分。例如:https:///vueexamples/vue_router.html#/route1?name = Tery
replace
向路由連結新增 replace 將呼叫router.replace() 而不是router.push()。使用 replace,不會儲存導航歷史記錄。
示例
<router-link v-bind:to = "{path:'/route1', query: { name: 'Tery' }}" replace>Router Link 1</router-link>
append
向 <router-link><router-link> 新增 append 將使路徑相對。
如果我們想從路徑為 /route1 的路由連結轉到路徑為 /route2 的路由連結,它將在瀏覽器中顯示路徑 /route1/route2。
示例
<router-link v-bind:to = "{ path: '/route1'}" append>Router Link 1</router-link>
tag
目前 <router-link> 呈現為 a 標籤。如果我們想將其呈現為其他標籤,我們需要使用 tag = ”tagname” 指定相同的標籤;
示例
<p> <router-link v-bind:to = "{ path: '/route1'}" tag = "span">Router Link 1</router-link> <router-link v-bind:to = "{ path: '/route2'}" tag = "span">Router Link 2</router-link> </p>
我們已將標籤指定為 span,這就是在瀏覽器中顯示的內容。

現在顯示的標籤是 span 標籤。當我們點選路由連結進行導航時,我們仍然會看到點選事件。
active-class
預設情況下,當路由連結處於活動狀態時新增的活動類是 router-link-active。我們可以透過設定相同的類來覆蓋它,如下面的程式碼所示。
<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>
使用的類是 active_class = ”_active”。這是在瀏覽器中顯示的輸出。

exact-active-class
應用的預設 exactactive 類是 router-link-exact-active。我們可以使用 exact-active-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
目前,router-link 的預設事件是 click 事件。我們可以使用 event 屬性更改它。
示例
<router-link v-bind:to = "{ path: '/route1'}" event = "mouseover">Router Link 1</router-link>
現在,當我們滑鼠懸停在路由連結上時,它將進行導航,如下面的瀏覽器所示。將滑鼠懸停在路由連結 1 上,我們會看到導航發生變化。
