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

vue實現(xiàn)動態(tài)路由添加功能的簡單方法(無廢話版本)

 更新時間:2023年02月16日 11:56:26   作者:夏燦y  
ue動態(tài)路由(約定路由),聽起來好像很玄乎的樣子,但是你要是理解了實現(xiàn)思路,你會發(fā)現(xiàn)沒有想象中的那么難,下面這篇文章主要給大家介紹了關于vue實現(xiàn)動態(tài)路由添加功能的簡單方法,需要的朋友可以參考下

前言

最近練習vue的項目,有關于后臺管理系統(tǒng)的動態(tài)添加路由部分,根據思路實現(xiàn)了基本的功能,在這里記錄一下,等后面學習后在進行優(yōu)化。

這里只是記錄我個人最后實現(xiàn)的思路,本人由于是初學者,可能思路和代碼有不正確地方,還求多見諒。也請能不吝賜教,一同進步。

一 . 封裝一個處理生產路由的函數(shù)

我們可以封裝一個函數(shù),這個函數(shù)專門用來幫助我們生產最后添加到路由中的路由對象。

//map-menu.js 
//動態(tài)添加路由
const modules = import.meta.glob('../views/*/*.vue')    //vite中獲取組件文件的方法
export function mapMenu(navList) {		//navList 傳入后臺接口返回的路由列表
  //最終動態(tài)添加路由返回數(shù)組
  const routerList = []
  for (const key of navList) {
    routerList.push({
      path: `/${key.nUrl.split('/')[2]}`,
      name: `${key.nUrl.split('/')[2].toUpperCase()}`,
      component: modules[`..${key.nUrl}`]
    })
  }
  return routerList
}

注意:這里需要大家自己根據自己需要的情況進行處理,因為后端接口傳遞過來的數(shù)據不同,所以你需要根據情況將path,name,component這三個獲取出來并最終轉換成你需要的。

二. vuex中進行調用

我們封裝好了一個函數(shù),接下來我們就需要調用來幫助我們動態(tài)生產路由,但是有一個問題來了,我們需要何時來進行動態(tài)生成路由。
這里我個人理解是:1.在用戶進行登錄后進行動態(tài)生產路由,將用戶的菜單生成出來,并保存起來。 2. 就是在頁面刷新時候我們也需要動態(tài)生成路由,因為刷新頁面路由會刷新,不再次進行動態(tài)生成就是丟失,這里我們可以和對vuex初始化一起進行。

// vuex中的user.js模塊
//動態(tài)添加路由
import { mapMenu } from '@/util/map-menu.js'   //前面封裝的函數(shù)
  state: {
    userNav: []
  },
  mutations: {
    changeUserNav(state, userNav) {
      state.userNav = userNav
      //動態(tài)添加路由
      mapMenu(userNav).forEach((route) => {
        router.addRoute(route)		//動態(tài)添加路由
      })
    }
  },
  actions: {
    async requestUserNav({ commit }) {
      const navList = await getRolesNavRequest()
      commit('changeUserNav', navList)
      cache.setCache('jxcms-userNav', navList)
    }
}

這樣我們就定義好了,只需要調用store.dispatch('requestUserNav') 就可以動態(tài)生成路由。另外,因為vue-router4.0中將 router.addRoutes方法廢除了,所以我們只能使用 router.addRoute 循環(huán)添加所有的路由。

三,最終完成動態(tài)添加路由

前面我們說過了,我們動態(tài)添加路由的時機就是二個,初始化和登錄時候,所以我們現(xiàn)在就完成最后的部分。

// vuex中的user.js模塊
//動態(tài)添加路由
import { mapMenu } from '@/util/map-menu.js'   //前面封裝的函數(shù)
  state: {
  ...
  },
  mutations: {
  ...
  },
  actions: {
    async loginUser({ dispatch, commit }, info) {
      const loginRes = await loginUser(info)
      if (loginRes.uName) {
        if (!cache.getCache('jxcms-token')) {
          ElMessage({
            message: '登錄成功!',
            type: 'success'
          })
        }
        commit('changeUser', loginRes)
        //本地存儲
        cache.setCache('jxcms-user', loginRes)
        dispatch('requestUserNav')	//執(zhí)行動態(tài)生成路由
       	router.push('/roles')
        cache.setCache('jxcms-token', loginRes.token)
      } else {
        ElMessage({
          message: '登錄失敗',
          type: 'error'
        })
      }
    }
}

這里我們完成第一個動態(tài)添加路由的時機,登錄成功時候,進行動態(tài)路由添加。

// vuex中的根模塊 index.js
  actions: {
    initializationData({ dispatch, commit }) {	//vuex初始化函數(shù)
      const navList = cache.getCache('jxcms-userNav')
      commit('changeUserNav', navList)	//動態(tài)生成路由
      //要用同步的
      const user = cache.getCache('jxcms-user')
      commit('changeUser', user)
    }
  },
  modules: {
    user,
    nav,
    dept,
    roles
  }
// main.js
//初始化
store.dispatch('initializationData')

這里我們完成了動態(tài)生成路由的第二個時機:刷新頁面時,初始化時候進行動態(tài)路由生成. 因為刷新頁面時候用戶可能是登錄狀態(tài),這樣我們就不能通過登錄成功來觸發(fā)動態(tài)路由添加,就需要我們主動進行動態(tài)路由生成,在初始化時候,獲取到本地存儲的菜單信息,如果用戶沒有登錄,本地的菜單信息會被清除。
另外,這里我使用的是commit來提交mutations,而不是actions函數(shù),這是因為我在測試過程中發(fā)現(xiàn),如果我使用actions,那么我在進入路由頁面前,路由并沒有創(chuàng)建成功,會報錯,而使用mutations,因為是同步的,所以不會出現(xiàn)這個情況。這個問題后面如果找到解決辦法,會重新進行修改。

總結 

到此這篇關于vue實現(xiàn)動態(tài)路由添加功能的簡單方法的文章就介紹到這了,更多相關vue動態(tài)路由添加內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Vue中this.$nextTick的作用及用法

    Vue中this.$nextTick的作用及用法

    在本文章里小編給大家整理了關于Vue中this.$nextTick的作用及用法,有需要的朋友們可以跟著學習參考下。
    2020-02-02
  • Vue3中watchEffect和watch的基礎應用詳解

    Vue3中watchEffect和watch的基礎應用詳解

    watch是一個偵聽器,默認是懶偵聽的,即僅在偵聽源發(fā)生變化時才執(zhí)行回調函數(shù),watchEffect是會自動收集函數(shù)里面變量的響應式依賴,本文主要來講講二者的區(qū)別,感興趣的可以了解一下
    2023-07-07
  • Vue中輸入框僅支持數(shù)字輸入的四種方法

    Vue中輸入框僅支持數(shù)字輸入的四種方法

    項目中需要用到大量的數(shù)字輸入框限制,為了可以以后能又更多的拓展性,下面這篇文章主要給大家介紹了關于Vue中輸入框僅支持數(shù)字輸入的四種方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-08-08
  • Vue實現(xiàn)動態(tài)顯示textarea剩余字數(shù)

    Vue實現(xiàn)動態(tài)顯示textarea剩余字數(shù)

    這篇文章主要為大家詳細介紹了Vue實現(xiàn)動態(tài)顯示textarea剩余文字數(shù)量,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Vue3 + TypeScript 開發(fā)總結

    Vue3 + TypeScript 開發(fā)總結

    本文直接上 Vue3 + TypeScript + Element Plus 開發(fā)的內容,感興趣的話一起來看看吧
    2021-08-08
  • 詳解如何在vue中使用sass

    詳解如何在vue中使用sass

    本篇文章主要介紹了詳解如何在vue中使用sass,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • vue完美實現(xiàn)el-table列寬自適應

    vue完美實現(xiàn)el-table列寬自適應

    這篇文章主要介紹了vue完美實現(xiàn)el-table列寬自適應,對vue感興趣的同學,可以參考下
    2021-05-05
  • vue中的路由攔截器的作用詳解

    vue中的路由攔截器的作用詳解

    在Vue中,路由攔截器主要用于在導航到某個路由前或者離開某個路由時進行攔截和處理,下面給大家介紹vue中的路由攔截器的作用,感興趣的朋友一起看看吧
    2024-07-07
  • vue中使用typescript配置步驟

    vue中使用typescript配置步驟

    本文主要介紹了vue中使用typescript配置,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • vue+SSM實現(xiàn)驗證碼功能

    vue+SSM實現(xiàn)驗證碼功能

    這篇文章主要介紹了vue+SSM實現(xiàn)驗證碼功能,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-12-12

最新評論

永寿县| 桂东县| 汉中市| 丹寨县| 广德县| 龙川县| 禄劝| 濮阳市| 定州市| 靖宇县| 垦利县| 日照市| 邵阳县| 万山特区| 平泉县| 孝义市| 时尚| 民县| 江陵县| 普兰店市| 江西省| 青川县| 乐清市| 什邡市| 永清县| 黔西县| 九台市| 普陀区| 饶平县| 大同县| 滁州市| 夹江县| 嘉定区| 十堰市| 特克斯县| 清新县| 喜德县| 准格尔旗| 都匀市| 淮阳县| 康乐县|