top
Loading...
Vue.js 路由

Vue.js 路由

本章節我們將為大家介紹 Vue.js 路由。

Vue.js 路由允許我們通過不同的 URL 訪問不同的內容。

通過 Vue.js 可以實現多視圖的單頁Web應用(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 可以很簡單的實現單頁應用。

<router-link> 是一個組件,該組件用於設置一個導航鏈接,切換不同 HTML 內容。 to 屬性為目標地址, 即要顯示的內容。

以下實例中我們將 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>

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') // 現在,應用已經啟動了!

嘗試一下 »

點擊過的導航鏈接都會加上樣式 class ="router-link-exact-active router-link-active"


<router-link> 相關屬性

接下來我們可以了解下更多關於 <router-link> 的屬性。

to

表示目標路由的鏈接。 當被點擊後,內部會立刻把 to 的值傳到 router.push(),所以這個值可以是一個字符串或者是描述目標位置的對象。

<!-- 字符串 -->
<router-link to="home">Home</router-link>
<!-- 渲染結果 -->
<a href="home">Home</a>
<!-- 使用 v-bind 的 JS 表達式 -->
<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>
<!-- 帶查詢參數,下面的結果為 /register?plan=private -->
<router-link :to="{ path: 'register', query: { plan: 'private' }}">Register</router-link>

replace

設置 replace 屬性的話,當點擊時,會調用 router.replace() 而不是 router.push(),導航後不會留下 history 記錄。

<router-link :to="{ path: '/abc'}" replace></router-link>

append

設置 append 屬性後,則在當前 (相對) 路徑前添加基路徑。例如,我們從 /a 導航到一個相對路徑 b,如果沒有配置 append,則路徑為 /b,如果配了,則為 /a/b

<router-link :to="{ path: 'relative/path'}" append></router-link>

tag

有時候想要 <router-link> 渲染成某種標籤,例如 <li>。 於是我們使用 tag prop 類指定何種標籤,同樣它還是會監聽點擊,觸發導航。

<router-link to="/foo" tag="li">foo</router-link>
<!-- 渲染結果 -->
<li>foo</li>

active-class

設置 鏈接激活時使用的 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

配置當鏈接被精確匹配的時候應該激活的 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 v-bind:to = "{ path: '/route1'}" event = "mouseover">Router Link 1</router-link>

以上代碼設置了 event 為 mouseover ,及在鼠標移動到 Router Link 1 上時導航的 HTML 內容會發生改變。

NPM 路由實例

接下來我們演示了一個使用 npm 簡單的路由實例,開始前,請先下載該實例源代碼:

路由實例

你也可以在 Github 上下載:https://github.com/chrisvfritz/vue-2.0-simple-routing-example

下載完後,解壓該目錄,重命名目錄為 vue-demo,vu 併進入該目錄,執行以下命令:

# 安裝依賴,使用淘寶資源命令 cnpm
cnpm install
# 啟動應用,地址為 localhost:8080
cnpm run dev

如果你需要發布到正式環境可以執行以下命令:

cnpm run build

執行成功後,訪問 http://localhost:8080 即可看到如下界面:

北斗有巢氏 有巢氏北斗