vue3 vue-router 傳遞路由參數

在 Vue 3 中,使用 vue-router 傳遞路由參數是非常常見的需求。

1. 使用動態路由參數(params

動態路由參數是定義在路由規則中的占位符部分,例如 /user/:id。你可以通過 router.push<router-link> 傳遞這些參數。

(1) 配置動態路由
import { createRouter, createWebHistory } from 'vue-router';const routes = [{path: '/user/:id', // 動態參數 :idcomponent: () => import('@/views/UserDetail.vue')}
];const router = createRouter({history: createWebHistory(),routes
});export default router;
(2) 通過?router.push?傳遞參數?
import { useRouter } from 'vue-router';export default {setup() {const router = useRouter();const navigateToUser = (userId) => {router.push({ name: 'user', params: { id: userId } }); // 傳遞參數};return { navigateToUser };}
};
(3) 在目標組件中獲取參數
?
import { useRoute } from 'vue-router';export default {setup() {const route = useRoute();const userId = route.params.id; // 獲取動態參數return { userId };}
};

?

2. 使用查詢參數(query

查詢參數是 URL 中 ? 后面的部分,例如 /search?name=Vue&id=123。你可以通過 router.push<router-link> 傳遞查詢參數。

(1) 通過?router.push?傳遞查詢參數
import { useRouter } from 'vue-router';export default {setup() {const router = useRouter();const navigateToSearch = () => {router.push({path: '/search',query: { name: 'Vue', id: 123 } // 傳遞查詢參數});};return { navigateToSearch };}
};
(2) 在目標組件中獲取查詢參數
import { useRoute } from 'vue-router';export default {setup() {const route = useRoute();const name = route.query.name; // 獲取查詢參數const id = route.query.id;return { name, id };}
};

?3. 使用命名路由(推薦)

如果你的路由配置中定義了 name 屬性,可以通過命名路由傳遞參數,這樣可以避免硬編碼路徑。

(1) 定義命名路由
const routes = [{path: '/user/:id',name: 'user', // 定義路由名稱component: () => import('@/views/UserDetail.vue')}
];
(2) 通過?router.push?使用命名路由傳遞參數
import { useRouter } from 'vue-router';export default {setup() {const router = useRouter();const navigateToUser = (userId) => {router.push({name: 'user', // 使用路由名稱params: { id: userId } // 傳遞動態參數});};return { navigateToUser };}
};

4. 使用?<router-link>?傳遞參數

除了編程式導航(router.push),你還可以通過 <router-link> 傳遞參數。

(1) 傳遞動態參數
<template><router-link :to="{ name: 'user', params: { id: 123 } }">跳轉到用戶詳情頁</router-link>
</template>
(2) 傳遞查詢參數
<template><router-link :to="{ path: '/search', query: { name: 'Vue', id: 123 } }">跳轉到搜索頁</router-link>
</template>

?5. 區分動態參數和查詢參數

類型位置示例 URL獲取方式
動態參數 (params)路徑中/user/123route.params.id
查詢參數 (query)URL 的???后/search?name=Vue&id=123route.query.name

6. 注意事項

  1. 動態參數會被移除

    • 如果你在導航時切換了路由,但沒有重新設置動態參數,那么參數會被清除。
    • 解決方法:確保在導航時重新傳遞參數,或者使用?watch?監聽?route.params?的變化。
  2. 查詢參數不會被移除

    • 查詢參數會保留在 URL 中,直到你手動清除或覆蓋它們。
  3. 強制刷新頁面時丟失參數

    • 如果用戶刷新頁面,動態參數和查詢參數仍然可以從?route.params?和?route.query?中獲取。

7. 完整示例

路由配置
const routes = [{path: '/user/:id',name: 'user',component: () => import('@/views/UserDetail.vue')},{path: '/search',name: 'search',component: () => import('@/views/SearchPage.vue')}
];
導航組件
<template><div><!-- 傳遞動態參數 --><router-link :to="{ name: 'user', params: { id: 123 } }">查看用戶詳情</router-link><!-- 傳遞查詢參數 --><router-link :to="{ path: '/search', query: { name: 'Vue', id: 123 } }">搜索內容</router-link></div>
</template>
接收參數的目標組件
<template><div><p>用戶 ID: {{ userId }}</p><p>查詢參數 Name: {{ name }}</p><p>查詢參數 ID: {{ id }}</p></div>
</template><script>
import { useRoute } from 'vue-router';export default {setup() {const route = useRoute();const userId = route.params.id; // 獲取動態參數const name = route.query.name; // 獲取查詢參數const id = route.query.id;return { userId, name, id };}
};
</script>

總結

  • 動態參數:適合用于 URL 中明確標識資源的情況,例如?/user/123
  • 查詢參數:適合用于可選參數或過濾條件,例如?/search?name=Vue&id=123
  • 命名路由:推薦使用命名路由,避免硬編碼路徑。

?

?
?
?

?
?

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

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

相關文章

【Java SE】包裝類 Byte、Short、Integer、Long、Character、Float、Double、Boolean

參考筆記&#xff1a;java 包裝類 萬字詳解&#xff08;通俗易懂)_java包裝類-CSDN博客 目錄 1.簡介 2.包裝類的繼承關系圖 3.裝箱和拆箱 3.1 介紹 3.2 手動拆裝箱 3.3. 自動拆裝箱 ?4.關于String類型的轉化問題 4.1 String類型和基本類型的相互轉化 4.1.1 String —…

【Qt】QByteArray詳解

QByteArray 是 Qt 框架中用于處理原始字節數據的核心類&#xff0c;其實質可以概括為以下幾點&#xff1a; 1. 底層數據結構 ? 連續內存塊&#xff1a;存儲一段連續的字節數據&#xff08;char*&#xff09;&#xff0c;類似 std::vector<char>&#xff0c;但針對 Qt 框…

Stable Diffusion vue本地api接口對接,模型切換, ai功能集成開源項目 ollama-chat-ui-vue

1.開啟Stable Diffusion的api服務 編輯webui-user.bat 添加 –api 開啟api服務&#xff0c;然后保存啟動就可以了 2.api 文檔地址 http://127.0.0.1:7860/docs3. 文生圖 接口 地址 /sdapi/v1/txt2img //post 請求入參 {enable_hr: false, // 開啟高清hrdenoising_stre…

CentOS 7 部署RuoYi 項目

換源 備份現有的 YUM 源配置文件 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 默認的 CentOS 官方鏡像源替換為阿里云的鏡像源&#xff0c;以提高下載速度和穩定性。 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.co…

從 WPF 到 MAUI:跨平臺 UI 開發的進化之路

一、引言 在軟件開發領域&#xff0c;用戶界面&#xff08;UI&#xff09;開發一直是至關重要的環節。隨著技術的不斷發展&#xff0c;開發者對于創建跨平臺、高性能且美觀的 UI 需求日益增長。Windows Presentation Foundation&#xff08;WPF&#xff09;和 .NET Multi - pl…

C++ stack容器總結

stack 基本概念 概念&#xff1a; stack是一種后進先出(Last In First Out, LIFO)的數據結構&#xff0c;它只有一個出口 棧中只有頂端的元素才可以被外界使用&#xff0c;因此棧不允許有遍歷行為 棧中進入的數據稱為----入棧&#xff08;PUSH&#xff09; 棧中出去的數據成…

【SDMs分析1】基于ENMTools R包的生態位分化分析和圖像繪制(identity.test())

基于ENMTools包的生態位分化 1. 寫在前面2. 生態位分化檢驗案例13. 生態位分化檢驗案例21. 寫在前面 最近學了一個新的內容,主要是關于兩個物種之間生態位分化檢驗的 R 語言代碼。生態位分化是物種分布模型(SDM )研究中的關鍵部分,許多 SCI 論文都會涉及這一分析。該方法主…

SpringBoot 7 種實現 HTTP 調用的方式

1. HttpClient HttpClient是Apache基金會提供的一個用于發送HTTP請求的Java客戶端庫。 盡管它功能強大&#xff0c;但由于其API設計較為復雜且包體積龐大&#xff0c;在一些輕量級的應用場景中可能顯得過于臃腫。 不過&#xff0c;在需要高度定制化的HTTP請求時&#xff0c;H…

Ubuntu與Windows之間相互復制粘貼的方法

一、打開Ubuntu終端 二、卸載已有的工具 sudo apt-get autoremove open-vm-tools 三、安裝工具 sudo apt-get install open-vm-tools-desktop 四、重啟 直接輸入reboot 注&#xff1a;有任何問題歡迎評論區交流討論或者私信&#xff01;

ECharts實現數據可視化

ECharts實現數據可視化 一、Echarts的簡介二、Echarts使用教程1.下載echarts.min.js文件2.編寫echarts代碼&#xff08;1&#xff09;創建渲染實列&#xff08;2&#xff09;修改option達到預期的效果&#xff08;3&#xff09;創建配置項到實例中 三、Echarts的基礎配置四、前…

ArcGIS 10.8.1之后發布柵格數據的MapServer 動態工作空間 替換數據源渲染問題

背景 經過測試&#xff0c;Server 10.8.1、11.0、11.1發布相關服務設置動態空間之后&#xff0c;前端都無法自動讀取同名的clr色彩映射表文件進行渲染&#xff0c;服務都是由ArcGIS Pro進行發布。 原因 基于ArcMap發布的服務才支持&#xff0c;但是10.8.1之后不支持ArcMap發…

vscode在使用 alt + tab 切換程序窗口時,輸入法總是自動變為中文模式

因為需要在 vscode 中編寫代碼&#xff0c;將輸入法設為英文模式&#xff0c;但是用 alt tab 切換到瀏覽器查看文檔&#xff0c;此時瀏覽器也是英文模式&#xff0c;但是再切回 vscode 后就變為中文模式了&#xff0c;需要使用 shift 鍵切換為英文模式&#xff0c;一次兩次還好…

【Linux加餐-網絡命令】

一、Ping命令 Ping 是一種網絡工具&#xff0c;用于測試主機之間的連通性。它通過發送 ICMP&#xff08;Internet Control Message Protocol&#xff09;回顯請求 報文到目標主機&#xff0c;并等待目標主機返回 ICMP 回顯應答 報文&#xff0c;從而判斷網絡是否通暢以及測量往…

Maven工具學習使用(六)——聚合與繼承

Maven的聚合特性能夠把項目的各個模塊聚合在一起構建,而Maven的繼承特性則能幫助抽取個模塊相同的依賴和插件等配置,在簡化POM的同時,還能促進各個模塊配置的一致性。 一般說來一個項目的子模塊都應該使用同樣的groupId,如果他們一起開發和發布,還應該使用同樣的version,…

vulhub靶場jangow-01-1.0.1

啟動靶機時點shift停在這個界面 點e進入編輯頁面&#xff0c;把ro改成rw signie init/bin/bash Ctrlx保存&#xff0c;ip a查看網卡信息 vim /etc/network/interfaces 把enp0s17改為ens33&#xff0c;保存退出 重啟靶機&#xff0c;nmap掃ip ip為192.168.93.179 nmap掃端口 掃…

C++11QT復習 (四)

Day6-1 輸入輸出流運算符重載&#xff08;2025.03.25&#xff09; 1. 拷貝構造函數的調用時機 2. 友元2.1 友元函數 3. 輸入輸出流運算符重載3.1 關鍵知識點3.2 代碼3.3 關鍵問題3.4 完整代碼 4. 下標訪問運算符 operator[]4.1 關鍵知識點4.2 代碼 5. 函數調用運算符 operator…

數倉架構告別「補丁」時代!全新批流一體 Domino 架構終結“批流縫合”

在數字化轉型的浪潮中&#xff0c;企業對數據處理的需求日益復雜多變&#xff0c;傳統的批處理和流處理架構已難以滿足日益增長的性能和時效性要求。在此背景下&#xff0c;YMatrix CEO 姚延棟發布了深度文章《數倉架構告別「補丁」時代&#xff01;全新批流一體 Domino 架構終…

一文詳解QT環境搭建:ubuntu20.4安裝配置Qt5

隨著軟件開發技術的不斷進步&#xff0c;跨平臺應用程序的需求日益增長&#xff0c;開發者們面臨著如何在不同操作系統之間保持代碼的一致性和效率的問題。Qt作為一個成熟的跨平臺C框架&#xff0c;在這方面提供了卓越的支持&#xff0c;不僅簡化了GUI應用程序的創建過程&#…

安全+低碳+高效:Acrel-3000助力企業打造未來型電能管理體系-安科瑞黃安南

一 背景 電能因為方便傳輸、易于轉換、便于控制等特性&#xff0c;成為廣大企事業單位生產、辦公最主要的能量來源。雙碳背景下&#xff0c;由于電能清潔、高效、零排放的特點&#xff0c;能源消費側將逐步以電代煤、以電代油、以電代氣&#xff0c;形成以電為中心的能源消費體…

Docker 安裝 RabbitMQ

以下是在Docker中安裝RabbitMQ并實現配置、數據、日志文件映射的完整步驟。 步驟 1&#xff1a;創建本地目錄結構 # 創建配置、數據、日志目錄 mkdir -p /root/docker/rabbitmq/{conf,data,logs}# 目錄結構說明&#xff1a; # - conf: 存放自定義配置文件 # - data: 持久化存儲…