動態路由使用

目錄

添加動態路由

添加單個路由

添加多個路由

指定路由添加的位置

導航守衛添加路由

刪除動態路由


添加動態路由

添加動態路由的方法有兩個:addRoutes(添加多個路由)和addRoute(添加單個路由),但是addRoutes只能vue2用,并且已經過時了,所以推薦用addRoute

添加單個路由
  • getRoutes()? 可以查看所有路由

  • hasRoute()? ?可以查看是否有某路由

<template><main><el-button @click="addRoutes">添加動態路由</el-button><el-button @click="toDemo01">跳轉Demo01</el-button></main>
</template><script setup lang="ts">
import { useRouter } from 'vue-router'const r = useRouter()const addRoutes = () => {r.addRoute({path: '/demo01',name: 'demo01',component: () => import('@/views/Demo01.vue'),})// 查看所有路由console.log(r.getRoutes());// 查看是否存在某路由console.log(r.hasRoute('demo01'));
}const toDemo01 = () => {r.push('/demo01')
}
</script>

還可以添加嵌套路由

  • 有一點需要注意:路由規則配置文件里,子路由可以不寫前面的父路由路徑,但是動態路由里不行,必須寫完整路徑
<template><main><h2>Home</h2><el-button @click="addRoutes">添加動態路由</el-button><el-button @click="toDemo02">跳轉Demo02</el-button></main>
</template><script setup lang="ts">
import { useRouter } from 'vue-router'const r = useRouter()const addRoutes = () => {r.addRoute({path: '/demo01',name: 'demo01',children: [{path: '/demo01/demo02', // 子路由一定要完整 只寫/demo02會報錯查找不到路由name: 'demo02',component: () => import('@/views/Demo02.vue'),}]})// 查看所有路由console.log(r.getRoutes());// 查看是否存在某路由console.log(r.hasRoute('demo02'));
}const toDemo02 = () => {r.push('/demo01/demo02')
}
</script>

還可以添加動態路由

<template><main><el-button @click="addRoutes">添加動態路由</el-button><el-button @click="toDemo01">跳轉Demo01</el-button></main>
</template><script setup lang="ts">
import { useRouter } from 'vue-router'const r = useRouter()const addRoutes = () => {r.addRoute({path: '/demo01/:id', // 還可以添加動態路由  路由只要是  ” /demo01/任意路由 “  都可以匹配到Demo01組件name: 'demo01',component: () => import('@/views/Demo01.vue'),})// 查看所有路由console.log(r.getRoutes());// 查看是否存在某路由console.log(r.hasRoute('demo01'));
}const toDemo01 = () => {// r.push('/demo01/1')r.push('/demo01/100')
}
</script>
添加多個路由

添加多個動態路由,可以把所有路由對象組成一個數組,對數組進行遍歷,然后挨個添加

<template><main><el-button @click="addRoutes">添加動態路由</el-button><el-button @click="toDemo01">跳轉Demo01</el-button><el-button @click="toDemo02">跳轉Demo02</el-button></main>
</template><script setup lang="ts">
import { useRouter } from 'vue-router'
import Demo01 from '@/views/Demo01.vue'
import Demo02 from '@/views/Demo02.vue'const r = useRouter()const addRoutes = () => {// 路由信息組成的數組const routeList = [{path: '/demo01',name: 'demo01',component: Demo01},{path: '/demo02',name: 'demo02',component: Demo02},]// 只能遍歷挨個添加routeList.forEach((item: any) => r.addRoute(item))// 查看所有路由console.log(r.getRoutes());// 查看是否存在某路由console.log(r.hasRoute('demo01'));console.log(r.hasRoute('demo02'));
}const toDemo01 = () => {r.push('/demo01')
}const toDemo02 = () => {r.push('/demo02')
}
</script>
指定路由添加的位置
  • 也就是可以指定路由添加到那個路由下面,addRoute第一個參數指定要添加到那,第二個參數正常的寫路由信息

路由配置文件

import { createRouter, createWebHistory } from 'vue-router'
import HomeView from '../views/HomeView.vue'const router = createRouter({history: createWebHistory(import.meta.env.BASE_URL),routes: [{path: '/',name: 'home',component: HomeView},{path: '/about',name: 'about',component: () => import('../views/AboutView.vue')}]
})export default router

我們希望路由添加到about路由里面,成為about的子路由

<template><main><el-button @click="addRoutes">添加動態路由</el-button><el-button @click="toDemo01">跳轉Demo01</el-button></main>
</template><script setup lang="ts">
import { useRouter } from 'vue-router'const r = useRouter()const addRoutes = () => {r.addRoute('about', {path: '/about/demo01', // 這里路由一定要寫完整。路由規則配置文件里,子路由可以不寫前面的路由路徑,但是動態路由里不行,必須寫完整路徑name: 'demo01',component: () => import('@/views/Demo01.vue'),})// 查看所有路由console.log(r.getRoutes());// 查看是否存在某路由console.log(r.hasRoute('demo01'));
}const toDemo01 = () => {r.push('/about/demo01')
}
</script>
導航守衛添加路由

一般做前端權限的時候用,添加后應該通過返回新的位置來觸發重定向,不然地址欄輸入路由不會跳轉

router.beforeEach(to => {if (!hasNecessaryRoute(to)) {router.addRoute(generateRoute(to))// 觸發重定向return to.fullPath}
})
  • hasNecessaryRoute(to)這個方法是避免重定向的,函數結果返回一個布爾值就行了。to參數攜帶了要前往路由的具體信息,如果是已經添加過的動態路由,應該返回false,避免重復添加,造成路由重定向,如果沒有添加過,則應該返回true,進行動態路由的添加

舉個例子,hasNecessaryRoute函數可以這樣寫

const hasNecessaryRoute = (to: any) => {// return router.getRoutes().some(route => route.path === to.path)// 或者下面這樣return router.hasRoute(to.name)
}

前端權限思想

只是大致寫了下思路,方法千奇百怪,能實現就行

1. 點擊登錄的時候,調用接口,后端返回此用戶的路由信息,

2. 跳轉路由到首頁,然后觸發全局前置導航守衛

3. 在全局前置導航守衛中進行動態路由的添加

刪除動態路由

通過添加一個名稱沖突的路由。如果添加與現有途徑名稱相同的途徑,會先刪除路由,再添加路由
?

router.addRoute({ path: '/about', name: 'about', component: About })
// 這將會刪除之前已經添加的路由,因為他們具有相同的名字且名字必須是唯一的
router.addRoute({ path: '/other', name: 'about', component: Other })

通過使用?router.removeRoute()?按名稱刪除路由

router.addRoute({ path: '/about', name: 'about', component: About })
// 刪除路由
router.removeRoute('about')

注意:當路由被刪除時,所有的別名和子路由也會被同時刪除

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

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

相關文章

ASO 對App產品性能的影響

可發現性 擁有出色的App還不足以讓人們發現它&#xff0c;ASO技術通過提高搜索排名來增強App的可發現性。當用戶可以在搜索結果中輕松找到應用程序時&#xff0c;那么下載和成功的潛力就會飆升。 設定期望 實施有效的應用商店優化不僅可以為潛在用戶建立正確的期望&#xf…

東方通 | 基于TongWeb中間件適配改造實戰

東方通 一、東方通[Tong Web] 簡介 ?為了方便地開發、部署、運行和管理Internet上基于三層/多層結構的應用&#xff0c;需要以基于組件的底層技術為基礎&#xff0c;規劃一個整體的應用框架&#xff0c;提供相應的支撐平臺&#xff0c;作為Internet應用的基礎設施&#xff0…

每日一類:Qt GUI開發的基石《QWidget》

深入探索QWidget&#xff1a;Qt GUI開發的基石 在Qt框架中&#xff0c;QWidget類扮演著構建圖形用戶界面&#xff08;GUI&#xff09;的基礎角色。它不僅提供了窗口的基本功能&#xff0c;還允許開發者通過繼承和定制來創建各式各樣的用戶界面元素。本文將詳細介紹QWidget的關…

白酒:傳統釀造工藝與現代科技相結合的創新實踐

在云倉酒莊豪邁白酒的生產過程中&#xff0c;傳統釀造工藝與現代科技的結合是推動產業發展的重要動力。云倉酒莊作為一家注重創新與實踐的酒莊&#xff0c;在這方面進行了許多有益的探索和嘗試。 首先&#xff0c;傳統釀造工藝是云倉酒莊豪邁白酒的靈魂。在長期的生產實踐中&am…

抽絲剝繭!API在互聯網金融領域里大顯身手:深度解鎖三大創新應用場景

&#x1f680; 引言 有這么一位幕后高手&#xff0c;它不顯山露水卻能牽動整個互聯網金融江湖的脈搏&#xff0c;它在無形中編織數據網絡&#xff0c;如同樞紐般連通各方資源&#xff0c;在靜默中推動創新進程&#xff0c;這就是大名鼎鼎的API&#xff08;應用程序接口&#x…

基于ssm學生學籍管理系統設計與實現+vue論文

目 錄 目 錄 I 摘 要 III ABSTRACT IV 1 緒論 1 1.1 課題背景 1 1.2 研究現狀 1 1.3 研究內容 2 2 系統開發環境 3 2.1 vue技術 3 2.2 JAVA技術 3 2.3 MYSQL數據庫 3 2.4 B/S結構 4 2.5 SSM框架技術 4 3 系統分析 5 3.1 可行性分析 5 3.1.1 技術可行性 5 3.1.2 操作可行性 5 3…

C語言:指針(二)

目錄 1.數組名的理解2.使用指針訪問數組3.一維數組傳參的本質4.二級指針5.指針數組6.字符指針變量7.數組指針變量8.二維數組傳參的本質9.函數指針變量10.函數指針數組11.回調函數12.qsort函數13.使用回調函數模擬實現qsort函數 1.數組名的理解 int main() {int arr[] { 1,2,3…

VBA將當前打開的表格生成PDF圖片

前言 VBA將當前的表格存儲成PDF文件進行存儲 代碼 Sub ExportToPDF()Dim FilePath As StringDim FileName As StringDim ExportRange As Range 設置導出文件路徑及名稱FilePath "D:\Users\"FileName "ExportedPDF" 設置導出區域范圍Set ExportRange Ra…

Unity(第十八部)物理力學,碰撞,觸發、關節和材質

1、重力 剛體組件 英文中文描述RigidBody剛體組件physics->rigidbody &#xff0c;剛體組件使一個物體有了質量&#xff0c;重力等。&#xff0c;use gravity 勾選后&#xff0c;物體才會受到重力&#xff0c;會自動下落&#xff0c;取消勾選就不會。&#xff0c;&#xf…

RTCA DO-178C 機載系統和設備認證中的軟件注意事項 - 目錄

本文為DO-178C標準目錄&#xff0c;可點擊以下對應章節直接跳轉至具體內容。 1.0 介紹 INTRODUCTION 2.0 軟件開發的系統相關性 SYSTEM ASPECTS RELATING TO SOFTWARE DEVELOPMENT 3.0 軟件生命周期 SOFTWARE LIFE CYCLE 4.0 軟件計劃過程 SOFTWARE PLANNING PROCESS 5.0 …

selenuim[1]($x(‘xpath語法’)、WebDriverWait())

文章目錄 初學selenuim記錄1、執行driver webdriver.Chrome()后很久才打開瀏覽器2、瀏覽器多元素定位 $x(‘xpath語法’)3、打開瀏覽器driver.get("網址")執行了很久才開始定位元素&#xff1a;等待&#xff08;1&#xff09;driver.set_page_load_timeout(t)&#…

超越CPU和GPU:引領AI進化的LPU

什么是CPU CPU&#xff08;Central Processing Unit&#xff09;是由數十億個晶體管構成的&#xff0c;可以擁有多個處理核心&#xff0c;通常被稱為計算機的“大腦”。它對所有現代計算系統至關重要&#xff0c;因為它執行計算機和操作系統所需的命令和進程。CPU在決定程序運…

【Linux C | 網絡編程】gethostbyaddr 函數詳解及C語言例子

&#x1f601;博客主頁&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客內容&#x1f911;&#xff1a;&#x1f36d;嵌入式開發、Linux、C語言、C、數據結構、音視頻&#x1f36d; &#x1f923;本文內容&#x1f923;&a…

JavaSE面試——hashcode和equals

對象調用 hashCode 方法后&#xff0c;會返回一串 int 類型的數字碼 java 規定&#xff1a; 1. 兩個對象的 hashCode() 相等&#xff0c;那他們的 equals() 不一定相等 2. 兩個對象的 equals() 相等&#xff0c;那他們的 hashCode() 必定相等 3. 重寫 equals() 方法時一定要…

三天學會阿里分布式事務框架Seata-SpringCloud Alibaba分布式基礎案例搭建

鋒哥原創的分布式事務框架Seata視頻教程&#xff1a; 實戰阿里分布式事務框架Seata視頻教程&#xff08;無廢話&#xff0c;通俗易懂版&#xff09;_嗶哩嗶哩_bilibili實戰阿里分布式事務框架Seata視頻教程&#xff08;無廢話&#xff0c;通俗易懂版&#xff09;共計10條視頻&…

日志到filebeat-->logstash-->elastic-->kibana

1、日志到filebeat。 cat /etc/filebeat/filebeat.yml filebeat.inputs: - type: syslog format: rfc3164 protocol.udp: host: "0.0.0.0:514" output.logstash: hosts: ["localhost:5044"] 驗證方式: tcpdump -i 網卡名稱 udp port 514 2、…

NLog條件配置——實現將包含某個特定字符串日志寫入指定文件

需求產生緣由 在開發中為了了解程序在運行的內存狀態并記錄下來&#xff0c;以便出問題時判斷是不是與內存相關。于是實時采集了開發程序需要的內存信息。但采集的內存信息在存儲時&#xff0c;以NLog中的Trace級別來存儲的話&#xff0c;會與程序其它Trace級別的日志都記錄在…

瑞吉蒼穹外賣如何拓展?已經經過不同公司多輪面試。項目中會問到哪些問題?以及問題如何解決?

別催了&#xff0c;別催了&#xff0c;先收藏吧。 作者大大正在加班加點完成。 文章會盡快發布&#xff0c;關注收藏&#xff0c;盡請期待。 想要加入并查閱作者的知識庫可以聯系作者 不要白嫖&#xff0c;通過后&#xff0c;附上關注和收藏截圖。 已有眾多小伙伴加入 目前…

QtCreator報Failed to parse qmlimportscanner output解決

錯誤如下: 定位錯誤位置 增加錯誤信息打印 打印執行命令 執行打印輸出的命令,成功返回JSON 但輸出的JSON對象不是json格式,而是命令 增加$$成功輸出JSON 使用QtCreator12編譯一次后,再使用QtCreator13成功編譯通過,問題解決

初學者如何使用QT新建一個包含UI界面的C++項目

文章目錄 一、下載并安裝QT51、下載安裝包2、注冊/登錄賬號3、安裝qt6 二、新建QT Widget項目1、新建項目并且運行2、易錯點&#xff1a;可能運行成功得到UI界面但是會報錯&#xff08;原因是使用了中文路徑&#xff09; 一、下載并安裝QT5 1、下載安裝包 進入下載網址 Windo…