Vue 3 中的路由傳參詳解※※※※

前言

在Vue應用中,路由傳參是非常常見的需求,它允許我們在不同的組件之間傳遞數據。Vue Router提供了兩種主要的方式來傳遞參數:query參數和params參數。下面我們將詳細探討這兩種傳參方式的使用方法和注意事項。

一、query參數

Query參數,顧名思義,是附加在URL后面的查詢字符串,以?開頭,后面跟著一系列的key=value對,多個鍵值對之間用&分隔。

1. 傳遞參數

在主路由中定義跳轉的子路由,使用<router-link>組件可以方便地實現query參數的傳遞。有兩種方式來指定to屬性:字符串寫法和對象寫法。

  • 字符串寫法:直接在to屬性中寫入路徑和查詢字符串。
<template><div class="news"><!-- 導航區 --><ul><li v-for="news in newsList" :key="news.id"><!-- 第一種寫法路徑拼接字符串--><RouterLink :to="`/news/detail?id=${news.id}&title=${news.title}&content=${news.content}`">{{news.title}}</RouterLink> --></li></ul><!-- 展示區點擊 路由跳轉 內容展示到 路由展示區--><div class="news-content"><RouterView></RouterView></div></div>
</template><script setup lang="ts" name="News">import {reactive} from 'vue'import {RouterView,RouterLink} from 'vue-router'const newsList = reactive([{id:'asfdtrfay01',title:'很好的抗癌食物',content:'西藍花'},{id:'asfdtrfay02',title:'如何一夜暴富',content:'學IT'},{id:'asfdtrfay03',title:'震驚,萬萬沒想到',content:'明天是周一'},{id:'asfdtrfay04',title:'好消息!好消息!',content:'快過年了'}])</script><style scoped>
/* 新聞 */
.news {padding: 0 20px;display: flex;justify-content: space-between;height: 100%;
}
.news ul {margin-top: 30px;/* list-style: none; */padding-left: 10px;
}
.news li::marker {color: #64967E;
}
.news li>a {font-size: 18px;line-height: 40px;text-decoration: none;color: #64967E;text-shadow: 0 0 1px rgb(0, 84, 0);
}
.news-content {width: 70%;height: 90%;border: 1px solid;margin-top: 20px;border-radius: 10px;
}
</style> 
  • 對象寫法:通過一個對象來指定路徑和查詢參數。對象的path屬性指定路徑,query屬性則是一個包含所有查詢參數的對象。
<template><div class="news"><!-- 導航區 --><ul><li v-for="news in newsList" :key="news.id"><!-- 第二種寫法指定路由名稱參數query列表--><RouterLink :to="{name:'xiang',query:{id:news.id,title:news.title,content:news.content}}">{{news.title}}</RouterLink></li></ul><!-- 展示區點擊 路由跳轉 內容展示到 路由展示區--><div class="news-content"><RouterView></RouterView></div></div>
</template><script setup lang="ts" name="News">import {reactive} from 'vue'import {RouterView,RouterLink} from 'vue-router'const newsList = reactive([{id:'asfdtrfay01',title:'很好的抗癌食物',content:'西藍花'},{id:'asfdtrfay02',title:'如何一夜暴富',content:'學IT'},{id:'asfdtrfay03',title:'震驚,萬萬沒想到',content:'明天是周一'},{id:'asfdtrfay04',title:'好消息!好消息!',content:'快過年了'}])</script><style scoped>
/* 新聞 */
.news {padding: 0 20px;display: flex;justify-content: space-between;height: 100%;
}
.news ul {margin-top: 30px;/* list-style: none; */padding-left: 10px;
}
.news li::marker {color: #64967E;
}
.news li>a {font-size: 18px;line-height: 40px;text-decoration: none;color: #64967E;text-shadow: 0 0 1px rgb(0, 84, 0);
}
.news-content {width: 70%;height: 90%;border: 1px solid;margin-top: 20px;border-radius: 10px;
}
</style>
2. 接收參數

在目標組件中,也就是上述定義的'xiang'路由組件,我們可以使用useRoute來獲取傳遞過來的query參數。useRoute返回一個響應式的路由對象,其中的query屬性包含了所有的查詢參數。

<template><ul class="news-list"><li>編號:{{ query.id }}</li><li>標題:{{ query.title }}</li><li>內容:{{ query.content }}</li></ul>
</template><script setup lang="ts" name="Detail">import {toRefs} from 'vue'import {useRoute} from 'vue-router'// 接收跳轉請求的query參數let route = useRoute()console.log(route.query)let {query} = toRefs(route)</script>

運行結果如下,在控制臺可以接收到路由請求參數。

二、params參數

Params參數是通過URL的路徑部分來傳遞參數的,通常用于傳遞動態路由參數。

1. 傳遞參數

同樣地,我們使用<router-link>組件來傳遞params參數。但需要注意的是,如果使用對象寫法來指定to屬性,我們必須使用路由的name配置項,而不能直接使用path。

  • 字符串寫法:直接在to屬性中寫入包含參數的路徑。
<RouterLink :to="`/news/detail/${news.id}/${news.title}/${news.content}`">{{news.title}}</RouterLink>
  • 對象寫法:通過一個對象來指定路由名稱和參數。對象的name屬性指定路由名稱,params屬性則是一個包含所有路徑參數的對象。
<RouterLink :to="{name:'xiang', // 使用name配置項params:{id:news.id,title:news.title,content:news.content}}"
>{{news.title}}
</RouterLink>
2. 接收參數

在目標組件中,我們同樣可以使用useRoute來獲取傳遞過來的params參數。但這次我們需要訪問的是route.params屬性。

<template><ul class="news-list"><!--獲取路由param的參數--><li>編號:{{ route.params.id }}</li><li>標題:{{ route.params.title }}</li><li>內容:{{ route.params.content }}</li></ul>
</template><script setup lang="ts" name="Detail">import {toRefs} from 'vue'import {useRoute} from 'vue-router'// 接收跳轉請求的param參數let route = useRoute()console.log(route)</script>

需要注意的是,使用param獲取路由參數,需要在路由定義的ts文件中,定義好參數,如:

    {name:'xinwen',path:'/news',component:News,// 嵌套子路由children:[{name:'xiang',path:'detail/:id/:title/:content?',component:Detail}]}

三、總結

  1. 當使用params參數時,如果采用對象寫法來指定to屬性,必須使用路由的name配置項,而不能直接使用path。這是因為params參數需要通過路由的名稱來進行匹配,而不是簡單地拼接路徑。
  2. 在傳遞params參數之前,需要在路由規則中為對應的參數占位。例如,如果我們要傳遞一個名為id的參數,那么路由規則應該包含一個:id的動態段。
  3. Query參數和params參數各有優缺點。Query參數簡單易用,不需要對路由規則做特殊處理;但缺點是它們會出現在URL中,可能會影響用戶體驗和SEO。Params參數更加靈活和安全,不會出現在URL中(除非你顯式地想要它們出現);但缺點是需要對路由規則進行特殊配置。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/73210.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/73210.shtml
英文地址,請注明出處:http://en.pswp.cn/web/73210.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何創建一個socket服務器?

1. 導入必要的庫 首先&#xff0c;需要導入Python的socket庫&#xff0c;它提供了創建和管理socket連接的功能。 python import socket 2. 創建服務器端socket 使用socket.socket()函數創建一個服務器端的socket對象&#xff0c;指定協議族&#xff08;如socket.AF_INET表示…

lua垃圾回收

lua垃圾回收 lua 垃圾回收 lua 垃圾回收 collectgarbage(“count”)獲取當前lua腳本占用內存字節數(單位為KB)。 collectgarbage(“collect”)執行一次垃圾回收。 xxxnil 將變量置為空&#xff0c;會釋放內存。 lua中的機制和c#中回收機制很類似 解除羈絆(置為空)。 --垃圾回…

友思特應用 | 行業首創:基于深度學習視覺平臺的AI驅動輪胎檢測自動化

導讀 全球領先的輪胎制造商 NEXEN TIRE 在其輪胎生產檢測過程中使用了基于友思特伙伴Neurocle開發的AI深度學習視覺平臺&#xff0c;實現缺陷檢測率高達99.96%&#xff0c;是該行業首個使用AI平臺技術推動缺陷檢測自動化流程的企業。 將AI應用從輪胎開發擴展到制造過程 2024年…

前后端+數據庫的項目實戰:hbu迎新網-較復雜(下)javaweb

目錄 十一、實現對內容的富文本編輯&#xff08;換行、圖片顏色等等樣式&#xff09; &#xff08;1&#xff09;下載富文本編輯器&#xff0c;引入資源 &#xff08;2&#xff09;將原項目的內容部分替換為富文本編輯器 1、替換添加頁面 2、替換修改頁面&#xff08;和添…

腳本語言 Lua

概念 Lua由標準C編寫而成&#xff0c;幾乎在所有操作系統和平臺上都可以編譯、運行。Lua腳本可以很容易地被C/C 代碼調用&#xff0c;也可以反過來調用C/C的函數&#xff0c;這使得Lua在應用程序中可以被廣泛應用。Lua并沒有提供強大的庫&#xff0c;它是不適合作為開發獨立應…

【數據分享】2000—2024年我國鄉鎮的逐月歸一化植被指數(NDVI)數據(Shp/Excel格式)

之前我們分享過2000—2024年我國省市縣三級逐月歸一化植被指數&#xff08;NDVI&#xff09;數據&#xff0c;該數據是基于NASA定期發布的MOD13A3數據集中的月度NDVI柵格數據&#xff08;可查看之前的文章獲悉詳情&#xff09;計算得出。很多小伙伴拿到數據后反饋是否可以處理出…

【負載均衡系列】HAProxy

HAProxy(High Availability Proxy)是一款高性能的 ?TCP/HTTP 負載均衡器,專注于提供高可用性、靈活性和可靠性。以下是關于HAProxy的詳細解析,涵蓋其工作原理、工作機制、工作模式等核心方面: 一、HAProxy 工作原理 HAProxy的核心職責是將客戶端請求高效、可靠地分發到后…

輕松遷移 Elasticsearch 數據:如何將自建索引導出并導入到另一個實例

概述 在日常的 Elasticsearch 運維和數據管理中&#xff0c;數據遷移是一個常見的需求。無論是為了備份、升級&#xff0c;還是將數據從一個集群遷移到另一個集群&#xff0c;導出和導入索引數據都是至關重要的操作。本文將詳細介紹如何將自建 Elasticsearch 實例中的索引數據…

JVM 類加載器之間的層次關系,以及類加載的委托機制

JVM 類加載器之間存在一種層次關系&#xff0c;通常被稱為雙親委派模型 (Parent Delegation Model)。這種層次關系和委托機制是 Java 類加載機制的核心&#xff0c;對于保證 Java 程序的安全性和避免類沖突至關重要。 1. 類加載器的層次關系: JVM 中的類加載器&#xff08;Cl…

基于 Vue 3 的PDF和Excel導出

以下是基于 Vue 3 Composition API 的完整實現&#xff0c;包括 PDF 和 Excel 導出。 一、PDF 導出 (Vue 3) 安裝依賴 在項目中安裝相關庫&#xff1a; npm install html2canvas jspdf Vue 3 代碼實現 <template><div><div ref"pdfContent" cla…

【Jupyter】notebook無法顯示tqdm進度條

錯誤描述 from tqdm.notebook import tqdm 用的時候報錯&#xff1a; Error displaying widget解決方式 # 先裝nodejs conda install -c conda-forge nodejs20# 重裝ipywidgets pip uninstall ipywidgets pip install ipywidgets jupyter labextension install jupyter-wid…

ubuntu20如何升級nginx到最新版本(其它版本大概率也可以)

前言&#xff1a; Nginx非常常用&#xff0c;所以在網絡安全方面備受“關注”。其漏洞非常多&#xff0c;要經常保持軟件更新版本才能更好的保證安全。但是Ubuntu官網適配nginx非常慢&#xff0c;所以nginx官方也會推出針對主流Linux操作系統的包管理工具安裝方式。 步驟&…

word插入Mathtype公式居中和自動更新

word插入公式自動更新 前提&#xff1a;安裝Mathtype 1.word中查看頁的寬度 出現如下 2.設置樣式 出現這個窗口 給樣式隨便起個名字 3.修改樣式 3.1 設置兩個制表位 第二個 3.2 修改公式字體 如下所示 4. 修改公式格式 4.1在word中打開 Mathtype 4.2 修改公式的格式 變成…

如何從后端實現頁面跳轉?

例&#xff1a;請求轉發 例&#xff1a;重定向 例&#xff1a;區別&#xff1a;攜帶參數的后端跳轉 例&#xff1a;是否可以訪問外部資源 請求轉發&#xff1a;客戶端發起一個請求到服務端&#xff0c;服務端把這個請求轉發至其他地方 重定向&#xff1a;客戶端發起一個請求…

APIJSON快速入門

作者 版本 時間 內容 備注 Allen V1.0.0 2021/08/19 初稿完成 AllenV1.0.1 2021/08/22 添加常見問題 1.流程說明 一個接口的開發,比如Java用SpringBoot,Mybatis來開發一般來說就像下面這個流程 部署上這個項目后,流程變成了這樣 如果使用 apijson-framework,還可進一步簡化…

STM32八股【3】------RAM和片上FLASH

1、RAM和FLASH構成 1.RAM ┌──────────────────────────┐ │ 棧區 (Stack) │ ← 從RAM頂端向下擴展&#xff08;存儲局部變量、函數調用信息&#xff09; │--------------------------│ │ 堆區 (Heap) │ ← …

基于springboot的星之語明星周邊產品銷售網站(050)

摘要 隨著信息互聯網信息的飛速發展&#xff0c;無紙化作業變成了一種趨勢&#xff0c;針對這個問題開發一個專門適應洗衣店業務新的交流形式的網站。本文介紹了星之語明星周邊產品銷售網站的開發全過程。通過分析企業對于星之語明星周邊產品銷售網站的需求&#xff0c;創建了一…

Android Launcher3 HotSeat文件夾創建禁止方案全解析

一、技術背景與實現原理 在Android 13 Launcher3定制開發中&#xff0c;需屏蔽HotSeat區域的文件夾創建功能。該功能涉及的核心事件處理流程如下&#xff1a; 復制 [拖拽事件] -> [Workspace.onDrop()] -> [CellLayout.performReorder()]└─> [createUserFolderIf…

從零到一開發一款 DeepSeek 聊天機器人

AI聊天機器人 目標設計方案系統架構技術選型功能模塊 實現代碼環境配置安裝依賴 核心代碼API 請求函數主循環函數 功能擴展1. 情感分析2. 多語言支持3. 上下文記憶4. 用戶身份識別 總結附錄 目標 開發一個智能聊天機器人&#xff0c;旨在為用戶提供自然、流暢的對話體驗。通過…

OpenCV-Contrib常用擴展模塊

?一、高頻使用模塊? ?aruco 模塊? ?功能?&#xff1a;用于生成與檢測二維碼&#xff08;如 ArUco Marker、AprilTag&#xff09;&#xff0c;支持增強現實&#xff08;AR&#xff09;中的物體定位與姿態估計?。?典型應用?&#xff1a;AR 應用中的場景錨定、機器人導航…