vue-10( 動態路由匹配和路由參數)

動態路由匹配和路由參數

動態路由匹配是 Vue Router 的一個強大功能,它允許你創建靈活且可重用的路由。您可以使用參數來捕獲 URL 的動態段,而不是為每個可能的值定義特定路由。這在處理具有唯一標識符的資源(如用戶配置文件、產品詳細信息或博客文章)時特別有用。路由參數使您能夠通過減少對硬編碼路由的需求來構建更易于維護和可擴展的應用程序。

了解動態路由匹配

動態路由匹配涉及定義具有可更改段的路由。這些段由路由參數表示,路由參數由冒號 () 后跟名稱表示。例如, /users/:id 定義一個路由,該路由與任何以 /users/ 開頭的 URL 匹配,后跟一個將作為 id 參數捕獲的動態分段。

基本示例

考慮您希望根據用戶 ID 顯示用戶配置文件的場景。您可以定義如下路由:

const routes = [{ path: '/users/:id', component: UserProfile }
]

在此示例中,:id 是 route 參數。當用戶導航到 /users/123 時,將呈現 UserProfile 組件,并且值 123 將作為 id 參數進行訪問。

訪問路由參數

UserProfile 組件中,您可以使用 $route.params 訪問 route 參數。

<template><div><h1>User Profile</h1><p>User ID: {{ userId }}</p></div>
</template><script>
export default {computed: {userId() {return this.$route.params.id;}}
}
</script>

在此組件中,userId 計算屬性從 $route.params 檢索 id 參數并將其顯示在模板中。

多個路由參數

您可以在單個路由中定義多個路由參數。例如,如果您有一個類似于 /products/:category/:id 的路由,則可以在組件中訪問 categoryid 參數。

const routes = [{ path: '/products/:category/:id', component: ProductDetails }
]
<template><div><h1>Product Details</h1><p>Category: {{ category }}</p><p>Product ID: {{ productId }}</p></div>
</template><script>
export default {computed: {category() {return this.$route.params.category;},productId() {return this.$route.params.id;}}
}
</script>

在這種情況下,導航到 /products/electronics/456 將呈現 ProductDetails 組件,其中 category 設置為 electronics,id 設置為 456

高級路由參數匹配

Vue Router 提供了控制路由參數匹配方式的高級選項。這包括可選參數、正則表達式匹配等。

可選參數

有時,您可能希望 route 參數是可選的。您可以通過在參數名稱后添加問號 () 來實現此目的。例如,/search/:query? 使 query 參數可選。

const routes = [{ path: '/search/:query?', component: SearchResults }
]
<template><div><h1>Search Results</h1><p v-if="query">Query: {{ query }}</p><p v-else>Enter a search query.</p></div>
</template><script>
export default {computed: {query() {return this.$route.params.query;}}
}
</script>

在此示例中,導航到 /search 將呈現不帶查詢的 SearchResults 組件,而導航到 /search/vue 將呈現查詢參數設置為 vue 的組件。

正則表達式匹配

您可以使用正則表達式為路由參數定義更具體的匹配條件。這是通過在參數名稱后的括號內添加正則表達式來完成的。例如, /users/:id(\\d+) 僅當 id 參數由一個或多個數字組成時,才會匹配。

const routes = [{ path: '/users/:id(\\d+)', component: UserProfile }
]

此路由將匹配 /users/123,但不匹配 /users/abc

<template><div><h1>User Profile</h1><p>User ID: {{ userId }}</p></div>
</template><script>
export default {computed: {userId() {return this.$route.params.id;}},watch: {'$route.params.id': {handler(newId) {if (!/^\d+$/.test(newId)) {alert('Invalid User ID');this.$router.push('/'); // Redirect to home or another appropriate route}},immediate: true // Check on initial load}}
}
</script>

在此示例中,組件使用 watch 根據正則表達式驗證 id 參數。如果 ID 不是數字,則會顯示警報,并重定向用戶。

Catch-all 路由

您可以使用 catch-all 路由來匹配與任何其他已定義路由不匹配的任何 URL。這是通過使用星號 (*) 作為路由路徑來完成的。例如,/* 將匹配任何 URL。

const routes = [{ path: '/users/:id', component: UserProfile },{ path: '/*', component: NotFound }
]

在此示例中,如果用戶導航到與 /users/:id 不匹配的 URL,則將呈現 NotFound 組件。

<template><div><h1>404 Not Found</h1><p>The requested page could not be found.</p></div>
</template>

優先權

定義路由時,定義路由的順序很重要。Vue Router 按照定義的順序匹配路由。因此,應在更通用的路由之前定義更具體的路由。

例如,如果您有以下路由:

const routes = [{ path: '/users/admin', component: AdminProfile },{ path: '/users/:id', component: UserProfile }
]

如果用戶導航到 /users/admin,則將呈現 AdminProfile 組件,因為它是在 /users/:id 路由之前定義的。如果路由以相反的順序定義,則將改為呈現 UserProfile 組件,并將 id 設置為 admin

實際示例和演示

讓我們探索一些使用動態路由匹配和路由參數的實際示例。

博客文章示例

考慮一個博客應用程序,您希望在其中根據其獨特的 slug 顯示單個博客文章。

const routes = [{ path: '/blog/:slug', component: BlogPost }
]
<template><div><h1>{{ post.title }}</h1><p>{{ post.content }}</p></div>
</template><script>
export default {data() {return {post: {}};},mounted() {// Simulate fetching the blog post from an APIsetTimeout(() => {this.post = {title: 'My First Blog Post',content: 'This is the content of my first blog post.'};}, 500);}
}
</script>

在此示例中,BlogPost 組件根據 slug 參數獲取博客文章數據。

電子商務產品示例

在電子商務應用程序中,您可能希望根據產品 ID 顯示產品詳細信息。

const routes = [{ path: '/products/:id', component: ProductDetails }
]
<template><div><h1>{{ product.name }}</h1><p>Price: {{ product.price }}</p><p>{{ product.description }}</p></div>
</template><script>
export default {data() {return {product: {}};},mounted() {// Simulate fetching the product details from an APIsetTimeout(() => {this.product = {name: 'Awesome Product',price: 99.99,description: 'This is an awesome product.'};}, 500);}
}
</script>

在此示例中,ProductDetails 組件根據 id 參數獲取產品詳細信息。

帶參數的嵌套路由

您還可以將動態路由匹配與嵌套路由一起使用。例如,您可能有一個用于顯示用戶配置文件的路由和另一個用于顯示其設置的路由。

const routes = [{path: '/users/:userId',component: UserProfile,children: [{path: 'settings',component: UserSettings}]}
]

在這種情況下,UserSettings 組件既可以訪問父路由中的 userId 參數,也可以訪問其自己的路由中定義的任何其他參數。

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

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

相關文章

劫持進程注入

劫持進程注入和遠程線程注入的區別就是 遠程線程注入是向一個正在運行中的進程注入 而劫持進程注入則是自己打開一個進程(以掛起的方式) 然后再進行注入的操作 這樣做的原因是當進程在掛起的狀態時他的所有線程都是處于未啟用的階段 這樣就可以避免目標進程的反注入線程的…

uni-app學習筆記二十--pages.json頁面路由pages設置

uni-app 通過 pages 節點配置應用由哪些頁面組成&#xff0c;pages 節點接收一個數組&#xff0c;數組每個項都是一個對象&#xff0c;其屬性值如下&#xff1a; 屬性類型默認值描述pathString配置頁面路徑styleObject配置頁面窗口表現&#xff0c;配置項參考下方 pageStylene…

VScode編譯調試debug,gpu的cuda程序,Nsight

進行下面操作的前提是&#xff0c;我們的環境已經能跑簡單的CUDA程序了。 一、安裝Nsight 二、創建launch.json文件 {"version": "0.2.0","configurations": [{"name": "CUDA C: Launch","type": "cuda-gdb…

鏈表題解——合并兩個有序鏈表【LeetCode】

1. 算法思路 這段代碼的核心思想是 合并兩個有序鏈表。具體步驟如下&#xff1a; 初始化哨兵節點&#xff1a; 創建一個哨兵節點 dummy&#xff0c;用于簡化鏈表操作&#xff0c;避免處理頭節點的特殊情況。使用指針 cur 指向 dummy&#xff0c;用于構建新的鏈表。 遍歷兩個鏈…

K8S集群主機網絡端口不通問題排查

一、環境&#xff1a; k8s: v1.23.6 docker: 20.10.14 問題和故障現象&#xff1a;devops主機集群主機節點到端口8082不通&#xff08;網絡策略已經申請&#xff0c;并且網絡策略已經實施完畢&#xff09;&#xff0c;而且網絡實施人員再次確認&#xff0c;網絡策…

qemu安裝risc-V 64

參考這篇文章https://developer.aliyun.com/article/1323996&#xff0c;其中在wsl下面安裝可能會報錯環境變量中有空格。 # clean_path.sh#!/bin/bash# 備份舊 PATH OLD_PATH"$PATH"# 過濾掉包含空格、制表符、換行的路徑 CLEAN_PATH"" IFS: read -ra PA…

python爬蟲:RoboBrowser 的詳細使用

更多內容請見: 爬蟲和逆向教程-專欄介紹和目錄 文章目錄 一、RoboBrowser概述1.1 RoboBrowser 介紹1.2 安裝 RoboBrowser1.3 與類似工具比較二、基本用法2.1 創建瀏覽器對象并訪問網頁2.2 查找元素2.3 填寫和提交表單三、高級功能3.1 處理文件上傳3.2 處理JavaScript重定向3.3…

CTFSHOW-WEB-36D杯

給你shell 這道題對我這個新手還是有難度的&#xff0c;花了不少時間。首先f12看源碼&#xff0c;看到?view_source&#xff0c;點進去看源碼 <?php //Its no need to use scanner. Of course if you want, but u will find nothing. error_reporting(0); include "…

CentOS_7.9 2U物理服務器上部署系統簡易操作步驟

近期單位網站革新&#xff0c;鑒于安全加固&#xff0c;計劃將原有Windows環境更新到Linux-CentOS 7.9&#xff0c;這版本也沒的說&#xff08;絕&#xff09;了&#xff08;版&#xff09;官方停止更新&#xff0c;但無論如何還是被sisi的牽掛著這一大批人&#xff0c;畢竟從接…

LVS-DR高可用-Keepalived

目錄 Keepalved雙機熱備 核心概念 關鍵組件 工作流程 實例環境 配置keepalived Web服務器配置 Keepalved雙機熱備 Keepalived雙機熱備是一種基于VRRP&#xff08;Virtual Router Redundancy Protocol&#xff0c;虛擬路由冗余協議&#xff09;實現的高可用性解決方案&am…

Polar編譯碼(SCL譯碼)和LDPC編譯碼(BP譯碼)的matlab性能仿真,并對比香農限

目錄 1.算法仿真效果 2.算法涉及理論知識概要 2.1香農極限 2.2 Polar碼編譯碼原理與SCL譯碼 2.3 LDPC碼編譯碼原理與BP譯碼 3.MATLAB核心程序 4.完整算法代碼文件獲得 1.算法仿真效果 matlab2024b仿真結果如下&#xff08;完整代碼運行后無水印&#xff09;&#xff1a…

AI 產品的 MVP 構建邏輯:Prompt 工程 ≠ 產品工程?(實戰增補篇)

一. 系統思維&#xff1a;產品工程的全局把控&#xff08;實戰增補篇&#xff09; 1. 某智能風控系統的彈性架構實踐 某消費金融公司在開發「30 秒極速貸」產品時&#xff0c;面臨兩大挑戰&#xff1a; Prompt 優化困境&#xff1a;傳統風控模型依賴 “提取用戶信用報告關鍵…

Unity程序集

對于Unity的程序集&#xff0c;具體內容可以參考Unity官方文檔&#xff0c;程序集定義 - 預定義程序集 比如Unity的默認程序集&#xff0c;Assembly-CSharp.dll&#xff0c;還有其他的比如 Assembly-CSharp-Editor.dll&#xff0c;Assembly-CSharp-firstpass.dll 沒有指定或…

【架構藝術】平衡技術架構設計和預期的產品形態

近期筆者因為工作原因&#xff0c;開始啟動team內部部分技術項目的重構。在事情啟動的過程中&#xff0c;內部對于這件事情的定性和投入有一些爭論&#xff0c;但最終還是敲定了下來。其中部分爭論點主要在于產品形態&#xff0c;因為事情涉及到跨部門合作&#xff0c;所以產品…

React和原生事件的區別

一、核心差異對比表 維度原生事件React 事件綁定語法HTML 屬性&#xff08;onclick&#xff09;或 DOM API&#xff08;addEventListener&#xff09;JSX 中使用駝峰式屬性&#xff08;onClick&#xff09;綁定位置直接綁定到具體 DOM 元素統一委托到根節點&#xff08;React …

大模型-modelscope下載和使用chatglm3-6b模型

前言 由于官方chatglm3-6b大模型文件下載比較慢&#xff0c;找到國內modelscope代替方案 1.SDK下載 pip install modelscope2.下載大模型文件 ?方法1:通過pip下載 1.安裝 setuptools 在當前使用的 Python 環境中安裝 setuptools pip install setuptools2.通過如下命令安…

【unity游戲開發——編輯器擴展】AssetDatabase公共類在編輯器環境中管理和操作項目中的資源

注意&#xff1a;考慮到編輯器擴展的內容比較多&#xff0c;我將編輯器擴展的內容分開&#xff0c;并全部整合放在【unity游戲開發——編輯器擴展】專欄里&#xff0c;感興趣的小伙伴可以前往逐一查看學習。 文章目錄 前言一、AssetDatabase常用API1、創建資源1.1 API1.2 示例 …

css實現文字漸變

在前端開發中&#xff0c;給文字設置漸變色是完全可以實現的&#xff0c;常用的方式是結合 CSS 的 background、-webkit-background-clip 和 -webkit-text-fill-color 屬性。下面是一個常見的實現方法&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> …

WSL 開發環境搭建指南:Java 11 + 中間件全家桶安裝實戰

在WSL&#xff08;Windows Subsystem for Linux&#xff09;環境下一站式安裝開發常用工具&#xff0c;能極大提升工作效率。接下來我將分步為你介紹如何在WSL中安裝Java 11、Maven、Redis、MySQL、Nacos、RabbitMQ、RocketMQ、Elasticsearch&#xff08;ES&#xff09;和Node.…

vue3: baidusubway using typescript

項目結構&#xff1a; <!--npm install -D tailwindcss-3d BaiduSubwayMap.vue npm install -D tailwindcss postcss autoprefixer--> <template><div class"relative w-full h-screen"><!-- 地圖容器 --><div id"subway-container…