首頁 web前端 js教程 Vue.js中的動態路由實例詳解

Vue.js中的動態路由實例詳解

Mar 13, 2018 pm 04:03 PM
javascript vue.js 實例

在文章使用vue-router完成簡單導航功能 中實現的路由導航功能是不能傳遞參數的,也就是說是靜態路由。而能傳遞參數的路由模式,由於可以傳遞參數,所以其對應的路由數量是不確定的,故稱之為 動態路由。

那麼如何將參數當作路由呢?

在參數名稱前面加上: ,然後將參數寫在路由的path

##如下範例:

  routes: [    //将页面组件与path指令的路由关联
    { name: 'BookInfo', path: '/books/:id', component: BookInfo }
  ]
登入後複製
登入後複製

這樣定義之後,

vue-router就會符合所有的:/books/1,/books/2,/books/3 …,所以說這樣定義的路由的數量是不確定的。

我們加入一個params 屬性來指定特定的參數值<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'> &lt;li&gt; &lt;router-link :to =&quot;{name:&amp;#39;BookInfo&amp;#39;,params :{id:1}}&quot; &gt; &lt;p&gt;首页&lt;/p&gt; &lt;/router-link&gt; &lt;/li&gt;</pre><div class="contentsignin">登入後複製</div></div><div class="contentsignin">登入後複製</div></div>

上面的連結對應就為: http://localhost:8080/__dirname/books/1

如果需要傳入多個參數值,只要按照上面的命名方法來加入參數,傳遞在params中對應的宣告參數值即可,vue-router只要符合到路由模式的定義就會自動對參數進行分解取值


path: '/books/version/:id',則對應params為:params :{id:1,version:1}


那麼現在就面臨這一個問題- 如何從路由中將這個參數值讀取出來呢?

答案:透過
$route.params這個屬性取得指定的參數值,如:this.$route.params.id,this.$route.params .msg

如果希望在對應的元件頁面內輸出參數值,對應程式碼如下:

<p>当前图书编号是:{{$route.params.id}}</p>
登入後複製
登入後複製

如果想在

js程式碼中根據參數值做對應的處理,則在預設路由中加入如下程式碼:

export default {  name: "app",  created() {    alert(this.$route.params.id);  }};
登入後複製
登入後複製

當使用路由參數的時候,如從

/books/1/books/2 ,原來的元件實例會被重複使用,因為兩個路由都渲染同一個元件,比起銷毀後再創建,重複使用的銷率會更高。 這也就是說元件的
生命週期鉤子不會再被呼叫(元件沒有被銷毀後再創建) ,也就是created  mounted 等鉤子函數在頁面第二次載入的時候回失效。

那麼,當複用元件時候,想對路由參數的變化做出回應的話,就需要在$watch 物件內加入對$ route 物件變化的追蹤函數

<script>
export default {  name: "app",
  watch :{
    &#39;$route&#39; (to,from){
      alert(to.params.id);
    }
  }
};
</script>
登入後複製
登入後複製


$route.params 定義的參數必然是整個路由的其中一部分,vue -router 也可以讓我們使用"/path?param = value" 的方式傳遞參數,可以使用$route.query.參數名稱 來取得參數值
vue-router 也提供一個常數參數定義meta,我們可以在路由定義中先定義meta 的值,然後在路由實例中透過$route.meta 參數取得具體常數值。

如下程式碼(

$route.query.參數名稱

{ name: &#39;BookInfo&#39;, path: &#39;/books/:id/?bookName=Lost&#39;, component: BookInfo }
登入後複製
登入後複製

取得其中

bookName 的值的程式碼為 this.$route.query.msg

如下程式碼(

$route.meta.參數名稱

{ name: &#39;BookInfo&#39;, path: &#39;/books/:id&#39;, component: BookInfo ,meta: { bookName : &#39;Lost In River&#39; }}
登入後複製
登入後複製

取得其中

bookName的值的程式碼為this.$route.meta.bookName

在文章使用vue-router完成簡單導航功能中實現的路由導航功能是不能傳遞參數的,也就是說是靜態路由。

而能傳遞參數的路由模式,由於可以傳遞參數,所以其對應的路由數量是不確定的,故稱之為

動態路由

那麼如何將參數當作路由呢?

在參數名稱前面加上

: ,然後將參數寫在路由的path

##如下範例:
  routes: [    //将页面组件与path指令的路由关联
    { name: &#39;BookInfo&#39;, path: &#39;/books/:id&#39;, component: BookInfo }
  ]
登入後複製
登入後複製

這樣定義之後,

vue-router

就會符合所有的:/books/1,/books/2,/books/3 …,所以說這樣定義的路由的數量是不確定的。

我們加入一個params 屬性來指定特定的參數值<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'> &lt;li&gt; &lt;router-link :to =&quot;{name:&amp;#39;BookInfo&amp;#39;,params :{id:1}}&quot; &gt; &lt;p&gt;首页&lt;/p&gt; &lt;/router-link&gt; &lt;/li&gt;</pre><div class="contentsignin">登入後複製</div></div><div class="contentsignin">登入後複製</div></div>上面的連結對應就為: http://localhost:8080/__dirname/books/1

如果需要傳入多個參數值,只要按照上面的命名方法來加入參數,傳遞在params中對應的宣告參數值即可,vue-router只要符合到路由模式的定義就會自動對參數進行分解取值

path: '/books/version/:id'
,則對應params為:params :{id:1,version:1}

那麼現在就面臨這一個問題- 如何從路由中將這個參數值讀取出來呢?
答案:透過

$route.params
這個屬性取得指定的參數值,如:this.$route.params.id,this.$route.params .msg如果希望在對應的元件頁面內輸出參數值,對應程式碼如下:

<p>当前图书编号是:{{$route.params.id}}</p>
登入後複製
登入後複製

如果想在js代码中根据参数值做相应的处理,则在默认路由中加入如下代码:

export default {  name: "app",  created() {    alert(this.$route.params.id);  }};
登入後複製
登入後複製

当使用路由参数的时候,如 从/books/1/books/2 ,原来的组件实例会被复用,因为两个路由都渲染同一个组件,比起销毁后再创建,复用的销率会更高。
这也就是说 组件的生命周期钩子不会再被调用(组件没有被销毁后再创建) ,即 created mounted 等钩子函数在页面第二次加载的时候回失效。

那么,当复用组件时候,想对路由参数的变化做出响应的话,就需要在 $watch 对象内添加对 $route 对象变化的跟踪函数

<script>
export default {  name: "app",
  watch :{
    &#39;$route&#39; (to,from){
      alert(to.params.id);
    }
  }
};
</script>
登入後複製
登入後複製

$route.params 定义的参数必然是整个路由的其中一部分,vue-router 还可以让我们使用 "/path?param = value" 的方式传递参数,可以使用$route.query.参数名 获取参数值
vue-router 还提供一种常量参数定义 meta,我们可以在路由定义中先定义 meta 的值,然后在路由实例中通过$route.meta 参数获取具体常量值。

如下代码($route.query.参数名

{ name: &#39;BookInfo&#39;, path: &#39;/books/:id/?bookName=Lost&#39;, component: BookInfo }
登入後複製
登入後複製

获取其中 bookName 的值的代码为 this.$route.query.msg

如下代码($route.meta.参数名

{ name: &#39;BookInfo&#39;, path: &#39;/books/:id&#39;, component: BookInfo ,meta: { bookName : &#39;Lost In River&#39; }}
登入後複製
登入後複製

获取其中 bookName 的值的代码为 this.$route.meta.bookName

相关推荐:

vue router动态路由和嵌套路由实例详解

以上是Vue.js中的動態路由實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何使用WebSocket和JavaScript實現線上語音辨識系統 如何使用WebSocket和JavaScript實現線上語音辨識系統 Dec 17, 2023 pm 02:54 PM

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

WebSocket與JavaScript:實現即時監控系統的關鍵技術 WebSocket與JavaScript:實現即時監控系統的關鍵技術 Dec 17, 2023 pm 05:30 PM

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

JavaScript與WebSocket:打造高效率的即時天氣預報系統 JavaScript與WebSocket:打造高效率的即時天氣預報系統 Dec 17, 2023 pm 05:13 PM

JavaScript和WebSocket:打造高效的即時天氣預報系統引言:如今,天氣預報的準確性對於日常生活以及決策制定具有重要意義。隨著技術的發展,我們可以透過即時獲取天氣數據來提供更準確可靠的天氣預報。在本文中,我們將學習如何使用JavaScript和WebSocket技術,來建立一個高效的即時天氣預報系統。本文將透過具體的程式碼範例來展示實現的過程。 We

簡易JavaScript教學:取得HTTP狀態碼的方法 簡易JavaScript教學:取得HTTP狀態碼的方法 Jan 05, 2024 pm 06:08 PM

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

學習Golang指標轉換的最佳實務範例 學習Golang指標轉換的最佳實務範例 Feb 24, 2024 pm 03:51 PM

Golang是一門功能強大且高效的程式語言,可用於開發各種應用程式和服務。在Golang中,指標是一種非常重要的概念,它可以幫助我們更靈活和有效率地操作資料。指標轉換是指在不同類型之間進行指標操作的過程,本文將透過具體的實例來學習Golang中指標轉換的最佳實踐。 1.基本概念在Golang中,每個變數都有一個位址,位址就是變數在記憶體中的位置。

如何在JavaScript中取得HTTP狀態碼的簡單方法 如何在JavaScript中取得HTTP狀態碼的簡單方法 Jan 05, 2024 pm 01:37 PM

JavaScript中的HTTP狀態碼取得方法簡介:在進行前端開發中,我們常常需要處理與後端介面的交互,而HTTP狀態碼就是其中非常重要的一部分。了解並取得HTTP狀態碼有助於我們更好地處理介面傳回的資料。本文將介紹使用JavaScript取得HTTP狀態碼的方法,並提供具體程式碼範例。一、什麼是HTTP狀態碼HTTP狀態碼是指當瀏覽器向伺服器發起請求時,服務

vue.js vs.反應:特定於項目的考慮因素 vue.js vs.反應:特定於項目的考慮因素 Apr 09, 2025 am 12:01 AM

Vue.js適合中小型項目和快速迭代,React適用於大型複雜應用。 1)Vue.js易於上手,適用於團隊經驗不足或項目規模較小的情況。 2)React的生態系統更豐富,適合有高性能需求和復雜功能需求的項目。

Oracle實例數量與資料庫效能關係 Oracle實例數量與資料庫效能關係 Mar 08, 2024 am 09:27 AM

Oracle實例數量與資料庫效能關係Oracle資料庫是業界知名的關係型資料庫管理系統之一,廣泛應用於企業級的資料儲存與管理。在Oracle資料庫中,實例是一個非常重要的概念。實例是指Oracle資料庫在記憶體中的運作環境,每個實例都有獨立的記憶體結構和後台進程,用於處理使用者的請求和管理資料庫的操作。實例數量對於Oracle資料庫的效能和穩定性有著重要的影響。

See all articles