最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue3 vite pinia配置動態(tài)路由、解決刷新頁面路由消失的問題

 更新時間:2023年10月23日 09:13:36   作者:解二  
這篇文章主要介紹了vue3 vite pinia配置動態(tài)路由、解決刷新頁面路由消失的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

實現(xiàn)思路

1,需要在靜態(tài)路由的基礎(chǔ)上用vue路由上面的addRoute()方法來動態(tài)添加路由,最后生成我們需要的路由

2,封裝添加路由的方法,在刷新頁面時重新生成路由

首先創(chuàng)建靜態(tài)路由

// 靜態(tài)路由 
export const basicRoutes = [
  {
    path: '/',
    redirect: '/login',
  },
  {
    path: '/login',
    name: 'login',
    component: () => import('@/views/login/index.vue'),
  },
  // 免登錄跳轉(zhuǎn)到項目中
  {
    path: '/hideLogin',
    name: 'hideLogin',
    component: () => import('@/views/hideLogin/index.vue'),
  },
  {
    // 異常頁面
    path: '/errorPage',
    component: () => import('@/components/error-page/404'),
    name: '404',
  },
]

創(chuàng)建路由的時候引入

import { createRouter, createWebHistory } from 'vue-router'
import { basicRoutes as routes } from './routes' // 引入靜態(tài)路由
 
export const router = createRouter({
  history: createWebHistory('/'),
  routes,
  scrollBehavior: () => ({ left: 0, top: 0 }),
})
export default router

封裝處理路由方法

import { deepClone } from '@/utils/utils' // 深拷貝
import router from './index'
// 處理路由展示列表樹形格式 (如果所有路由數(shù)據(jù)是在同一級,需要調(diào)用這個方法)
export const formatRouterTree = (data) => {
  let parents = data.filter((i) => i.pid === 0),
    children = data.filter((item) => item.pid !== 0)
  dataToTree(parents, children)
  function dataToTree(parents, children) {
    parents.map((p) => {
      children.map((c, i) => {
        let _c = deepClone(children)
        _c.splice(i, 1)
        dataToTree([c], _c)
        if (p.children) {
          p.children.push(c)
        } else {
          p.children = [c]
        }
      })
    })
  }
}
 
// vite中獲取文件
const modules = import.meta.glob([
  '../views/*.vue',
  '../views/*/*.vue',
  '../views/*/*/*.vue',
  '../components/layout/index.vue',
])
 
// 處理路由所需格式
export const generateRouter = (userRouters) => {
  let newRouter = null
  if (userRouters)
    newRouter = userRouters.map((i) => {
      let routes = {
        path: i.pathUrl,
        name: i.name,
        // meta: i.meta,
        component:
          i.pathUrl === '/layout'
            ? modules[`../components/layout/index.vue`]
            : modules[`../views${i.pathUrl}/index.vue`],
      }
      if (i.children) {
        routes.children = generateRouter(i.children)
      }
      return routes
    })
  return newRouter
}
 
/**
 * 添加動態(tài)路由
 */
export function setAddRoute(routes) {
  if (routes && routes.length > 0)
    routes.forEach((route) => {
      const routeName = route.name
      if (!router.hasRoute(routeName)) router.addRoute(route)
    })
}

在store中寫一個調(diào)用方法

import { defineStore } from 'pinia'
import { generateRouter, setAddRoute } from '@/router/vue-router.js'
export const routeStore = defineStore('route', {
  state: () => {
    return {
    }
  },
  actions: {
    addRouter() {
      // 生成路由樹
      // routerList在登陸成功時獲取到,在跳轉(zhuǎn)頁面之前存起來
      let find = JSON.parse(window.localStorage.getItem('routerList'))
      let routerList = generateRouter(find)
      // 添加路由
      setAddRoute(routerList)
    },
  },
  getters: {},
})

登陸時存儲路由信息

import { generateRouter, setAddRoute } from '@/router/vue-router.js'
 
Login.Login(params).then(async (res) => {
     if (res.code === 200) {
        // 存用戶信息、token等,這里不寫了
 
        // 調(diào)接口獲取路由信息 params傳當(dāng)前用戶角色來獲取對應(yīng)的路由信息
        let routerList = await getRouterList(params)
        // 存儲路由信息
        window.localStorage.setItem('routerList', routerList)
        
        // 生成路由樹
        let list = generateRouter(routerList)
        // 添加路由
        setAddRoute(list)
        
        // 最后跳轉(zhuǎn)到首頁并提示
        router.push('首頁')
        ElMessage.success('登陸成功')
     }  
})

解決刷新消失

上面只是在登陸時候添加了路由,點擊刷新頁面后會消失,需要在main.js中配置一下

import { createPinia } from 'pinia'
import { routeStore } from '@/store/modules/routeMenu.js' // 這個是我的store里面的方法路徑
const store = createPinia()
const app = createApp(App)
app.use(store)
let routeStores = routeStore()
const addRouter = () => {
  routeStores.addRouter()
}
addRouter()
// router要在添加完路由之后引入,不然還沒添加,路由已經(jīng)生成了
app.use(router)

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 一文帶你搞懂Vue3.5的響應(yīng)式重構(gòu)

    一文帶你搞懂Vue3.5的響應(yīng)式重構(gòu)

    在Vue3.5版本中最大的改動就是響應(yīng)式重構(gòu),重構(gòu)后性能竟然炸裂的提升了56%,本文我們來講講使用雙向鏈表后,Vue內(nèi)部是如何實現(xiàn)依賴收集和依賴觸發(fā)的,感興趣的可以了解下
    2024-11-11
  • 使用Ant design vue實現(xiàn)Excel的上傳及讀取方式

    使用Ant design vue實現(xiàn)Excel的上傳及讀取方式

    這篇文章主要介紹了使用Ant design vue實現(xiàn)Excel的上傳及讀取方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • Element表格表頭行高問題解決

    Element表格表頭行高問題解決

    在最近一個項目的后臺管理系統(tǒng)中,寫前端界面時用到了ElementUI,但是發(fā)現(xiàn)導(dǎo)入數(shù)據(jù)表格之后表頭的高度一直很高,那么如何解決,本文就來詳細(xì)的介紹一下
    2021-09-09
  • vue2使用jspdf插件實現(xiàn)頁面自定義塊pdf下載方式

    vue2使用jspdf插件實現(xiàn)頁面自定義塊pdf下載方式

    本文介紹了在Vue項目中實現(xiàn)PDF下載功能的案例,使用了jspdf和html2-canvas插件,實現(xiàn)了點擊按鈕彈出下載進(jìn)度彈窗并顯示四個模塊下載進(jìn)度,下載完成后關(guān)閉彈窗的功能,文中提供了使用的插件版本和相關(guān)代碼,供讀者參考
    2026-04-04
  • Vue.js 使用v-cloak后仍顯示變量的解決方法

    Vue.js 使用v-cloak后仍顯示變量的解決方法

    這篇文章主要介紹了Vue.js 使用v-cloak后仍顯示變量的解決方法 ,文中給大家提到了v-cloak的用法,需要的朋友可以參考下
    2018-11-11
  • vue中的$emit 與$on父子組件與兄弟組件的之間通信方式

    vue中的$emit 與$on父子組件與兄弟組件的之間通信方式

    本文主要對vue 用$emit 與 $on 來進(jìn)行組件之間的數(shù)據(jù)傳輸。重點給大家介紹vue中的$emit 與$on父子組件與兄弟組件的之間通信方式,感興趣的朋友一起看看
    2018-05-05
  • vue.js 子組件無法獲取父組件store值的解決方式

    vue.js 子組件無法獲取父組件store值的解決方式

    今天小編就為大家分享一篇vue.js 子組件無法獲取父組件store值的解決方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Vue如何得到一行的數(shù)據(jù)

    Vue如何得到一行的數(shù)據(jù)

    在Vue中,rows為Object數(shù)組,直接使用rows[0]即可獲取單行數(shù)據(jù),無需調(diào)用getById;修改數(shù)據(jù)時可用toRaw避免重復(fù)查詢,提升效率
    2025-08-08
  • vue如何實現(xiàn)跨頁面?zhèn)鬟f與接收數(shù)組并賦值

    vue如何實現(xiàn)跨頁面?zhèn)鬟f與接收數(shù)組并賦值

    這篇文章主要介紹了vue如何實現(xiàn)跨頁面?zhèn)鬟f與接收數(shù)組并賦值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 解決ElementUI組件中el-upload上傳圖片不顯示問題

    解決ElementUI組件中el-upload上傳圖片不顯示問題

    這篇文章主要介紹了解決ElementUI組件中el-upload上傳圖片不顯示問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10

最新評論

横山县| 呼和浩特市| 怀远县| 尚志市| 迁西县| 玉山县| 璧山县| 龙川县| 大洼县| 山丹县| 增城市| 四平市| 南郑县| 宜兴市| 垣曲县| 陆良县| 济南市| 银川市| 新野县| 长海县| 剑阁县| 大荔县| 克山县| 荣成市| 精河县| 安溪县| 察雅县| 龙游县| 安顺市| 呼伦贝尔市| 邯郸市| 当阳市| 龙江县| 手游| 桃园县| 青铜峡市| 嵊泗县| 新源县| 金寨县| 陇南市| 上蔡县|