vue-router路由,帶參數的動態路由匹配(2024-05-14)

需求

需要將給定匹配模式的路由映射到同一個組件。例如,我們可能有一個?User?組件,它應該對所有用戶進行渲染,但用戶 ID 不同。在 Vue Router 中,我們可以在路徑中使用一個動態字段來實現,我們稱之為?路徑參數?:

const User = {template: '<div>User</div>',
}// 這些都會傳遞給 `createRouter`
const routes = [// 動態字段以冒號開始{ path: '/users/:id', component: User },
]

現在像?/users/johnny?和?/users/jolyne?這樣的 URL 都會映射到同一個路由。

路徑參數?用冒號?:?表示。當一個路由被匹配時,它的?params?的值將在每個組件中以?this.$route.params?的形式暴露出來。因此,我們可以通過更新?User?的模板來呈現當前的用戶。

你可以在同一個路由中設置有多個?路徑參數,它們會映射到?$route.params?上的相應字段。例如:

匹配模式匹配路徑$route.params
/users/:username/users/eduardo{ username: 'eduardo' }
/users/:username/posts/:postId/users/eduardo/posts/123{ username: 'eduardo', postId: '123' }

除了?$route.params?之外,$route?對象還公開了其他有用的信息,如?$route.query(如果 URL 中存在參數)、$route.hash?等。你可以在?API 參考中查看完整的細節。

實例

import { createRouter, createWebHistory } from 'vue-router'
import UserPost from './views/UserPost.vue'export const router = createRouter({history: createWebHistory(),routes: [{ path: '/users/:username/posts/:postId', component: UserPost }],
})// html
<template><ul><li><router-link to="/users/eduardo/posts/1">/users/eduardo/posts/1</router-link></li><li><router-link to="/users/eduardo/posts/20">/users/eduardo/posts/20</router-link></li></ul><router-view></router-view>
</template><script>
export default {name: "App",
};
</script>

1、響應路由的參數變化

使用帶有參數的路由時需要注意的是,當用戶從?/users/johnny?導航到?/users/jolyne?時,相同的組件實例將被重復使用。因為兩個路由都渲染同個組件,比起銷毀再創建,復用則顯得更加高效。不過,這也意味著組件的生命周期鉤子不會被調用

要對同一個組件中參數的變化做出響應的話,你可以簡單地 watch?$route?對象上的任意屬性,在這個場景中,就是?$route.params?:

const User = {template: '...',created() {this.$watch(() => this.$route.params,(toParams, previousParams) => {// 對路由變化做出響應...})},
}

?或者,使用?beforeRouteUpdate?導航守衛,它也可以取消導航:

const User = {template: '...',async beforeRouteUpdate(to, from) {// 對路由變化做出響應...this.userData = await fetchUser(to.params.id)},
}

2、捕獲所有的路由或者404 Not found 路由

常規參數只匹配 url 片段之間的字符,用?/?分隔。如果我們想匹配任意路徑,我們可以使用自定義的?路徑參數?正則表達式,在?路徑參數?后面的括號中加入 正則表達式 :

js

const routes = [// 將匹配所有內容并將其放在 `$route.params.pathMatch` 下{ path: '/:pathMatch(.*)*', name: 'NotFound', component: NotFound },// 將匹配以 `/user-` 開頭的所有內容,并將其放在 `$route.params.afterUser` 下{ path: '/user-:afterUser(.*)', component: UserGeneric },
]

在這個特定的場景中,我們在括號之間使用了自定義正則表達式,并將pathMatch?參數標記為可選可重復。這樣做是為了讓我們在需要的時候,可以通過將?path?拆分成一個數組,直接導航到路由:

js

this.$router.push({name: 'NotFound',// 保留當前路徑并刪除第一個字符,以避免目標 URL 以 `//` 開頭。params: { pathMatch: this.$route.path.substring(1).split('/') },// 保留現有的查詢和 hash 值,如果有的話query: this.$route.query,hash: this.$route.hash,
})

如果你正在使用歷史模式,請務必按照說明正確配置你的服務器。

3、高級匹配模式?

Vue Router 使用自己的路徑匹配語法,其靈感來自于?express,因此它支持許多高級匹配模式,如可選的參數,零或多個 / 一個或多個,甚至自定義的正則匹配規則。

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

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

相關文章

添磚Java之路(其五)——封裝,String,StringBuilder類。

封裝&#xff1a; 封裝意義&#xff1a;更好的維護數據&#xff0c;讓使用者無需關心如何使用&#xff0c;只需要知道怎么使用。 Java Bean&#xff1a; 然后我們要知道Java Bean(實體類)標準。 1.對于這個類的成員都需要設為私有&#xff0c;而且要對外提供相應Get,Set的接…

組合商標申請如何風控提高通過率!

最近一個老客戶找到普推知產老楊&#xff0c;說要申請注冊一個新的商標&#xff0c;是一個組合商標&#xff0c;有圖形&#xff0c;兩行文字&#xff0c;一行文字的拼音&#xff0c;還有三個字母的簡稱&#xff0c;組合商標在申請時會進行拆分審查&#xff0c;圖形、文字、拼音…

【C++初階】第十一站:list的介紹及使用

目錄 list的介紹及使用 1.list的含義 2.list的介紹 3.list的使用 1.list的構造 2.list iterator的使用 3.list capacity 4.list element access 5 list modifiers 尾插尾刪 和 頭插頭刪 insert 和 erase resize swap clear 6.list sort and reverse 7.list copy vector copy li…

Java身份證識別接口集成開發示例,身份證查詢接口

人類是有情感的&#xff0c;人們所接觸到的各種事物和信息都會被身體相應器官所接收&#xff0c;然后通過神經元傳入大腦繼而被識別&#xff0c;然后大腦便會產生對該事物的認知和情緒。人們大多喜歡熱情、有趣的事物&#xff0c;對冷冰冰、枯燥、無趣的APP基本是提不起興趣的。…

16.Set、泛型、枚舉、反射、Class

Set Set集合是Collection集合的子接口&#xff0c;元素不能重復&#xff0c;只能有一個null&#xff0c;元素存放無序。 常用子類 HashSet TreeSet LinkedHashSet HashSet 其實底層就是HashMap&#xff0c;當我們構造一個HashSet對象&#xff0c;就是在 new HashSet(); …

23. 合并 K 個升序鏈表 - 力扣(LeetCode)

基礎知識要求&#xff1a; Java&#xff1a;方法、while循環、for循環、PriorityQueue類、if判斷 Python&#xff1a; 方法、while循環、for循環、heapq 模塊、if判斷 數據結構:隊列 題目&#xff1a; 給你一個鏈表數組&#xff0c;每個鏈表都已經按升序排列。 請你將所有鏈…

11.php-fpm模板(監控頁面取值)

php-fpm模板(監控頁面取值) 開啟監控頁面配置 #修改php配置文件 vim /etc/php-fpm.d/www.conf pm.status_path /php_status#修改nginx配置文件,添加到nginx配置文件中 vim /etc/nginx/conf.d/default.conflocation /php_status {root html;fastcgi_pass 127.0.…

肥貓“也能變“型男“?揭秘福派斯牛肉高脂貓糧的神奇效果!

福貓養成指南&#xff1a;福派斯牛肉高脂貓糧的優點與考慮因素 福派斯牛肉高脂貓糧&#xff0c;這款富含蛋白質與脂肪的貓糧&#xff0c;仿佛是貓咪世界中的美味佳肴&#xff0c;讓無數貓咪為之傾倒。然而&#xff0c;這款貓糧的利與弊&#xff0c;你是否都了解呢&#xff1f;接…

AI模型部署實戰:利用OpenCV的CUDA模塊加速視覺模型部署流程

本文首發于公眾號【DeepDriving】&#xff0c;歡迎關注。 一. 前言 我在之前的文章《AI模型部署實戰&#xff1a;利用CV-CUDA加速視覺模型部署流程》中介紹了如何使用CV-CUDA庫來加速視覺模型部署的流程&#xff0c;但是CV-CUDA對系統版本和CUDA版本的要求比較高&#xff0c;在…

大模型介紹

大模型通常指的是參數量超過億級別&#xff0c;甚至千億級別的深度學習模型。這類模型能夠處理更加復雜的任務&#xff0c;并在各項基準測試中取得了優異的成績。大模型在自然語言處理、計算機視覺、推薦系統等領域都取得了顯著的成果。 大模型的主要優勢在于其強大的表征能力&…

k8s的核心組件etcd功能詳解【含etcd各類參數詳細說明】

etcd 是 Kubernetes 中的一個關鍵組件&#xff0c;用于存儲集群的配置信息、狀態和元數據。它通常作為 Kubernetes 集群的數據存儲后端&#xff0c;為其他組件提供可靠的分布式鍵值存儲服務。下面我會詳細介紹 etcd 的功能以及常見的參數&#xff0c;以及如何配置和使用 etcd。…

Linux實驗 Shell編程

實驗目的&#xff1a; 熟練掌握Shell程序的建立與執行&#xff1b;掌握Shell變量的兩種類型&#xff08;Shell環境變量和用戶自定義變量&#xff09;及其用法&#xff1b;掌握Shell中的特殊字符、算術與邏輯運算&#xff1b;掌握Shell中輸入輸出命令&#xff1b;掌握Shell程序…

在Windows環境下安裝CPU版的PyTorch

PytTorch是基于Python開發的&#xff0c;首先需要安裝Python&#xff0c;Python的安裝很簡單&#xff0c;這里不再贅述。而 Windows用戶能直接通過conda、pip和源碼編譯三種方式來安裝PyTorch。 打開PyTorch官網&#xff08;PyTorch&#xff09;&#xff0c;在主頁中根據自己的…

基于OpenCV年齡與性別識別系統

深入解析基于OpenCV年齡與性別識別系統 在這篇博客中&#xff0c;我們將詳細解析一個使用OpenCV進行年齡和性別識別的Python腳本。這個腳本展示了如何利用深度學習模型&#xff0c;從視頻或圖像中檢測人臉并預測每個人臉的年齡和性別。 1. 導入必要的模塊 import cv2 as cv …

ELK的詳解

ELK是由Elasticsearch、Logstash和Kibana三個開源軟件&#xff08;后來又新加了一個FileBeat&#xff09;組成的日志管理解決方案&#xff0c;這一組合在近年來得到了廣泛的關注和應用。以下是對這三個組件的詳細說明&#xff1a; Elasticsearch&#xff1a; Elasticsearch是…

nginx 負載均衡配置詳解

基于 ${nginx_home}/conf/nginx.conf 文件配置實現&#xff0c;如下&#xff1a; http {# 定義server地址upstream server_group {server 192.168.xxx.1:8080;server 192.168.xxx.2:8080;server 192.168.xxx.3:8080;}server {listen 80;location / {root html;index …

python數據分析——時間序列

時間序列 前言一、Datetime 模塊常用函數和數據結構的詳細解釋datetime模塊示例一示例二 二、時間運算示例一示例二示例三 三、時間序列分析自回歸(Autoregressive model/AR)模型示例 滑動平均(moving average model/MA)模型示例 自回歸滑動平均(Autoregressive moving average…

持續總結中!2024年面試必問 100 道 Java基礎面試題(四十五)

上一篇地址&#xff1a;持續總結中&#xff01;2024年面試必問 100 道 Java基礎面試題&#xff08;四十四&#xff09;-CSDN博客 八十九、在Java中&#xff0c;什么是線程局部變量&#xff08;ThreadLocal變量&#xff09;&#xff1f; 在Java中&#xff0c;ThreadLocal變量是…

企業微信hook接口協議,ipad協議http,發送鏈接的方式邀請成員進群

發送鏈接的方式邀請成員進群 參數名必選類型說明uuid是String每個實例的唯一標識&#xff0c;根據uuid操作具體企業微信 請求示例 {"uuid":"3240fde0-45e2-48c0-90e8-cb098d0ebe43","roomid":10696052955013729, "vids":[788130334…

Flutter 中的 CircleAvatar 小部件:全面指南

Flutter 中的 CircleAvatar 小部件&#xff1a;全面指南 在 Flutter 中&#xff0c;CircleAvatar 是一個用于顯示頭像的圓形控件&#xff0c;通常包含一個圖標、圖片或者一個簡單的文本字符。它在設計上與 Material Design 指南中的頭像規范相匹配&#xff0c;常用于展示用戶信…