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;'> <li>
<router-link :to ="{name:&#39;BookInfo&#39;,params :{id:1}}" >
<p>首页</p>
</router-link>
</li></pre><div class="contentsignin">登入後複製</div></div><div class="contentsignin">登入後複製</div></div>
如果需要傳入多個參數值,只要按照上面的命名方法來加入參數,傳遞在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 :{ '$route' (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: 'BookInfo', path: '/books/:id/?bookName=Lost', component: BookInfo }
bookName 的值的程式碼為
this.$route.query.msg
$route.meta.參數名稱)
{ name: 'BookInfo', path: '/books/:id', component: BookInfo ,meta: { bookName : 'Lost In River' }}
bookName的值的程式碼為
this.$route.meta.bookName
動態路由
那麼如何將參數當作路由呢?在參數名稱前面加上:
##如下範例:,然後將參數寫在路由的
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;'> <li>
<router-link :to ="{name:&#39;BookInfo&#39;,params :{id:1}}" >
<p>首页</p>
</router-link>
</li></pre><div class="contentsignin">登入後複製</div></div><div class="contentsignin">登入後複製</div></div>
上面的連結對應就為: http://localhost:8080/__dirname/books/1
如那麼現在就面臨這一個問題- 如何從路由中將這個參數值讀取出來呢?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 :{ '$route' (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: 'BookInfo', path: '/books/:id/?bookName=Lost', component: BookInfo }
获取其中 bookName
的值的代码为 this.$route.query.msg
如下代码($route.meta.参数名
)
{ name: 'BookInfo', path: '/books/:id', component: BookInfo ,meta: { bookName : 'Lost In River' }}
获取其中 bookName
的值的代码为 this.$route.meta.bookName
相关推荐:
以上是Vue.js中的動態路由實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

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

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

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

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

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

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

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

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