vite+vue3實現動態路由

在做這個動態路由的時候踩了很多坑,其中大部分是粗心了

動態菜單主要是導入的方式 import.meta.glob

參考:功能 | Vite 官方中文文檔

1、多層路由渲染(用3層路由做demo)

拿到接口的數據是后臺直接處理好的結構,但是在addRoute的時候發現其他層沒有添加上,這個地方就處理成一級目錄先把動態路由添加上再說

const whiteList = ['/login']// 免登錄白名單
const modules = import.meta.glob('../views/**/*.vue')router.beforeEach((to, from, next) => {document.title = `${to.meta.title}`const token=Cookies.get('token')if(token){if (to.path === '/login') {next()}else{if(store.state.menulist.length==0){$api.getUserData().then(res =>{if(res){if(res.code==0){let menulist=[];let newChildren=[];for(let i=0;i<res.data.menuWithCurrentRoleList.length;i++){let item=res.data.menuWithCurrentRoleList[i];let children=[];if(item.subMenuList){for(let j=0;j<item.subMenuList.length;j++){let items=item.subMenuList[j]items.path=items.router;let asarr=[];if(items.subMenuList){for(let jj=0;jj<items.subMenuList.length;jj++){let as=items.subMenuList[jj]let aobjs={"path":as.href, "name":as.moduleName, children:[],subMenuList:as.subMenuList,parent:3,"meta":{"title":as.name,},// component: () => import(`../views${as.href}.vue`),/**這個靜態路由只能本地使用**/component: modules[`../views${as.href}.vue`],}asarr.push(aobjs)newChildren.push(aobjs)}}let aobj={"path":items.href, "name":items.moduleName, children:[],parent:2,subMenuList:asarr,"meta":{"title":items.name,},//  component: () => import(`../views${items.href}.vue`),component: modules[/* @vite-ignore */`../views${items.href}.vue`],}children.push(aobj)newChildren.push(aobj)}}let obj={"path":item.href, "name":item.moduleName, children:[],parent:1,subMenuList:children,"meta":{"title":item.name,},// component: () => import(`../views${item.href}.vue`),component: modules[`../views${item.href}.vue`],}// console.log(obj.component,'====111===',item.href)menulist.push(obj)newChildren.push(obj)}store.dispatch('setMenulist',newChildren).then(() => {newChildren.forEach((route) => {router.addRoute('home',{ ...route });});next({ ...to, replace: true });}); }}})}else{next()}}}else{if (whiteList.indexOf(to.path) !== -1) { // 在免登錄白名單,直接進入next()} else {next(`/login?redirect=${to.fullPath}`) // 否則全部重定向到登錄頁}}
})

說明:

import.meta.glob('../views/**/*.vue')

一個*表示文件,兩個**表示文件夾,.vue是說這個下面的所有.vue文件

我當時遇到的問題有點奇怪,有的路由菜單可以點擊,有的不可以,我當時粗心有2點。

1、文件名大小寫被我忽略了,沒有注意到,所以,一定要注意文件名有沒有錯

2、使用modules的時候我第三層的前面加了()=>然后在打印component的時候,?打印出來的是變量名

第一個框起來的是路徑錯誤,我沒有這個文件

第二個框起來的是正確的,路徑正確也可以正常訪問

第三個錯誤的,因為我加了component:()=>modules,實際不需要加,我當時沒有注意到這個地方,找了好久的問題?

最后:如果有好的多層動態菜單處理方法,大家可以告訴我呀。

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

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

相關文章

Lua腳本操作redis

模擬庫存扣減 基礎版 SpringBootTest class LuaTests {Resource(name"redisTemplate")ValueOperations<String,Long> valueOperations;AutowiredStringRedisTemplate stringRedisTemplate;final String priductKey "product.1";Testvoid test1()…

Java NIO, IO 整理

NIO: IO多路復用: 參考: Redis&#xff08;六&#xff09;單線程I/O多路復用模型淺析_單線程多路復用-CSDN博客 Java NIO 詳解_java nio詳解_開發菜雞的博客-CSDN博客 Java Socket 之 NIO - 掘金 答應我&#xff0c;這次搞懂 I/O 多路復用&#xff01;_小林coding的博客-CS…

Spring JdbcTemplate

一、簡介 Spring 框架對 JDBC 進行封裝&#xff0c;使用 JdbcTemplate 方便實現對數據庫操作。它是 spring 框架中提供的一個對象&#xff0c;是對原始 Jdbc API 對象的簡單封裝。spring 框架為我們提供了很多的操作模板類。 針對操作關系型數據&#xff1a; jdbcTemplateHibe…

A* 算法簡介

一、A* 算法簡介A* algorithm is a popular choice for graph search. Breadth First Search is the simplest of the graph search algorithms. Graph search algorithms, including A*, take a “graph” as input. A* algorithm is a modification of Dijkstra’s Algorithm…

華為OD機試 - 部門人力分配(Java JS Python C)

題目描述 部門在進行需求開發時需要進行人力安排。 當前部門需要完成 N 個需求,需求用 requirements 表述,requirements[i] 表示第 i 個需求的工作量大小,單位:人月。 這部分需求需要在 M 個月內完成開發,進行人力安排后每個月人力時固定的。 目前要求每個月最多有2個…

在k8s中部署nfs-client-provisioner

1、部署過程 1.1、環境依賴 在部署nfs-client-provisioner之前&#xff0c;需要先部署nfs服務。 因為&#xff0c;nfs-client-provisioner創建的pv都是要在nfs服務器中搭建的。 本示例中的nfs server的地址如下&#xff1a; [rootnode1 /]# showmount -e Export list for …

pinia 持久化插件使用

官方文檔 本文主要介紹 vue3組合式 api 使用持久化插件的寫法。 選項式 寫法官方已給出 安裝依賴 pnpm i pinia-plugin-persistedstate插件的使用 import { createPinia } from pinia import piniaPluginPersistedstate from pinia-plugin-persistedstateconst pinia creat…

JavaMap工具類(MapUtils)

1、Object轉Map 2、將 map 中的 value 為null的的元素轉成空字符串"" 3、map轉Object 4、MAP 判空 5、Map 排序 按key值長度進行排序 6、兩個MAP對比&#xff0c;在oldMap中移除remMap中所有的key值 備注&#xff1a;排序的話(TreeMap)是可以直接實現簡單排序的…

VR轉接線方案/VR Link串流數據線方案/VR眼鏡PD快充方案

虛擬現實技術(英文名稱&#xff1a;Virtual Reality&#xff0c;縮寫為VR)&#xff0c;又稱虛擬實境或靈境技術&#xff0c;是20世紀發展起來的一項全新的實用技術。虛擬現實技術囊括計算機、電子信息、仿真技術&#xff0c;其基本實現方式是以計算機技術為主&#xff0c;利用并…

Java:commons-lang3中的StringUtils.strip實現移除字符串首尾字符

依賴 <dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version> </dependency>示例 // 包名 import org.apache.commons.lang3.StringUtils;// 處理字符串&…

kafka支持外網訪問

kafka支持外網訪問 1.kafka正常部署之后如果不修改&#xff0c;外網是無法訪問的&#xff0c;具體如下&#xff08;這里是單節點&#xff09; 2.這個時候需要修改kafka的config中的server.properties中的 listeners 修改為0.0.0.0 監控所有網卡&#xff0c;advertised.listene…

管理空閑存儲空間

位示圖是操作系統中一種管理空閑存儲空間的方法。管理空閑除使用位示圖法還可用&#xff1a;空閑區表法&#xff0c;空閑鏈表法&#xff0c;成組鏈接法 1.空閑區表法 空閑表法屬于連續分配方法。它與內存管理中的動態分區分配方法雷同。 將外存空間上一個連續未分配區域稱為“…

[三次反轉法]循環移動數組元素

循環移動 題目描述 給定一組整數&#xff0c;要求利用數組把這組數保存起來&#xff0c;然后實現對數組的循環移動。假定供有n個整數&#xff0c;則要使前面各數順序向后移m個位置&#xff0c;并使最后m個數變為最前面的m個數(m<n)。 注意&#xff0c;不要用先輸出后m個數…

口袋參謀:如何對訂單實現一鍵批量插旗?

?在淘寶店鋪運營中&#xff0c;對寶貝訂單標注插旗&#xff0c;也算是常態了&#xff0c;至少90%的商家都不陌生&#xff0c;剩下的10%是剛入行的新手&#xff0c;正如我剛入行一樣。 01 首先我們要了解什么是插旗&#xff1f; 其實就是淘寶店鋪利用各種顏色的旗子來代表訂單…

A-23 P離子交換樹脂:高效去除無機有機污染物的新選擇

在當今水處理行業中&#xff0c;高效、環保的離子交換樹脂備受關注。本文將為您介紹一款具有卓越性能的堿性季胺基陰離子交換樹脂——Tulsion A-23 P。通過分析其特性和應用&#xff0c;展示其在水處理領域的優勢。 一、Tulsion A-23 P離子交換樹脂的特性 物理化學穩定性&#…

Vue生命周期函數執行順序(使用注意事項)

文章目錄 beforeCreatecreatedbeforeMountmountedbeforeUpdateupdatedbeforeDestroydestroyed Vue.js 是一個基于 MVVM 模式的前端框架&#xff0c;它的核心是一個響應式的數據綁定系統。在 Vue.js 中&#xff0c;組件是一個可復用的 Vue 實例&#xff0c;它擁有自己的生命周期…

input聚焦,失去焦點的那些事

需求&#xff1a; 1&#xff1a;搜索輸入時顯示清空按鈕和搜索按鈕&#xff1b; 2&#xff1a;點擊搜索按鈕失去焦點&#xff0c;并查詢&#xff1b; 3&#xff1a;點擊清空按鈕后重新聚焦&#xff1b; 需要解決的問題&#xff1a; 1&#xff1a;失去焦點需要別的處理的話要加…

Linux命令——nc

Linux命令——nc 文章目錄 Linux命令——nc例子客戶端/服務端模型數據傳輸與服務端交互端口掃描使用代理發送文件聊天工具一次性 Web Server文件夾傳輸遠程克隆磁盤shell反向 shell 參考 netcat&#xff0c;簡寫為 nc&#xff0c;是 unix 系統下一個強大的命令行網絡通信工具&a…

JS手寫Promise.all方法

測試例子 var f11 Promise.resolve("111");var f22 Promise.resolve("222");var f33 Promise.resolve("333");// var f33 Promise.reject("333");1、用原生 Promise 實現 邏輯說明&#xff1a;接收一個由多個promise方法組成的數組…

uniapp開發小程序-pc端小程序下載后端接口的二進制流文件

fileName包含文件名后綴名&#xff0c;比如test.png這種格式 api.DownloadTmtFile后端接口返回的是文件的二進制流 值得注意的是&#xff0c;微信開發者工具中是測試不了wx.saveFileToDisk的&#xff0c;需要真機或者體驗版測試 handleDownload(fileName) {if (!fileName) retu…