国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

vue 實現(xiàn)動態(tài)路由

這篇具有很好參考價值的文章主要介紹了vue 實現(xiàn)動態(tài)路由。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

vue動態(tài)路由,vue.js,前端,javascript,Powered by 金山文檔

vue-router對象中的addRoutes,用它來動態(tài)添加路由配置

格式:

router.addRoutes([路由配置對象])
this.$router.addRoutes([路由配置對象])

舉個例子:

// 按鈕
<button @click="hAddRoute">addRoute</button>

// 回調(diào)
hAddRoute() {
    this.$router.addRoutes([{
        path: '/abc',
        component: () => import('@/views/abc'),
        }])
},

我是以 vue-admin-template 為例,做如下演示:

在router/index.js中的路由配置中 只保留靜態(tài)路由(因為我們要動態(tài)的添加))

const createRouter = () => new Router({
  // mode: 'history', // require service support
  scrollBehavior: () => ({ y: 0 }),
  routes: [...constantRoutes]   //因為要動態(tài)添加動態(tài)路由,所以這里只寫靜態(tài)路由
})

在permission.js中引入,并使用addRoutes動態(tài)添加

這個是 router 下的 index.js中定義的 靜態(tài)路由、動態(tài)路由

vue動態(tài)路由,vue.js,前端,javascript,Powered by 金山文檔
vue動態(tài)路由,vue.js,前端,javascript,Powered by 金山文檔

接下來來看 在permission.js中引入的內(nèi)容,

// 引入所有的動態(tài)路由表(未經(jīng)過篩選)
+ import router, { asyncRoutes } from '@/router'

const whiteList = ['/login', '/404']
router.beforeEach(async(to, from, next) => {
  // 開啟進度條
  NProgress.start()
  // 獲取本地token 全局getter
  const token = store.getters.token
  if (token) {
    // 有token
    if (to.path === '/login') {
      next('/')
    } else {
      if (!store.getters.userId) {
        await store.dispatch('user/getUserInfo')
        // 改寫成動態(tài)添加的方式
+       router.addRoutes(asyncRoutes)
      }
      next()
    }
  } else {
    // 沒有token
    if (whiteList.includes(to.path)) {
      next()
    } else {
      next('/login')
    }
  }
  // 結(jié)束進度條
  NProgress.done()
})

如果我們希望在調(diào)用addRoutes方法之后,要路由數(shù)據(jù)立刻反映到菜單中,我們需要想一個額外的方法,思考一下,vue開發(fā)中,哪個技術(shù)可以保證響應(yīng)式特性還可以動態(tài)修改? vuex!

補充模塊,在src/store/modules下補充menu.js模塊 (定義vuex管理菜單數(shù)據(jù)

import { constantRoutes } from '@/router' 
export default {
  namespaced: true,
  // 公共數(shù)據(jù)
  state: {
    // 本地取一下token
    menuList: [] // 所有可以訪問的路由配置
  },
  mutations: {
    setMenuList(state, asyncRoutes) { 
      console.log('asyncRoutes', asyncRoutes) //第二個參數(shù)是調(diào)用mutatains時傳過來的動態(tài)路由參數(shù)
      state.menuList = [...constantRoutes, ...asyncRoutes]
    }
  }
}

當然,要在 src/store/index.js 中注冊這個模塊

vue動態(tài)路由,vue.js,前端,javascript,Powered by 金山文檔

修改src/permission.js中的代碼

if (!store.getters.userId) {
        await store.dispatch('user/getUserInfo')

        // 動態(tài)添加可以訪問的路由設(shè)置
        router.addRoutes(asyncRoutes)

        // 根據(jù)用戶實際能訪問幾個頁面來決定從整體8個路由設(shè)置
        // 中,過濾中出來幾個,然后保存到vuex中
    ++   store.commit('menu/setMenuList', asyncRoutes)  //把動態(tài)路由存入vuex中
      }

在src\layout\components\Sidebar\index.vue文件中,修改

routes() {
  // 拿到的是一個完整的包含了靜態(tài)路由和動態(tài)路由的數(shù)據(jù)結(jié)構(gòu)
  return this.$store.state.menu.menuList
}

上一步我們實現(xiàn)了: 1.把動態(tài)路由通過addRoutes動態(tài)添加到了路由系統(tǒng)里, 2. 把動態(tài)路由保存到vuex的menu中,

但是我們沒有和權(quán)限數(shù)據(jù)做搭配,接下來我們通過接口返回的權(quán)限數(shù)據(jù)對動態(tài)菜單做過濾處理,以確定完成菜單與用戶權(quán)限相關(guān)。

接下來就是 調(diào)接口,后端返給你菜單數(shù)據(jù):

用戶能訪問哪些頁面是通過actions獲取到的,只需要從action中返回即可

vue動態(tài)路由,vue.js,前端,javascript,Powered by 金山文檔

在permission.js中獲取action的返回值并過濾

if (!store.getters.userId) {
        // 有token,要去的不是login,就直接放行
        // 進一步獲取用戶信息
        // 發(fā)ajax---派發(fā)action來做
        const menus = await store.dispatch('user/getUserInfo')
        console.log('當前用戶能訪問的頁面', menus)
        console.log('當前系統(tǒng)功能中提供的所有的動態(tài)路由頁面是', asyncRoutes)
        // 根據(jù)本用戶實際的權(quán)限menus去 asyncRoutes 中做過濾,選出本用戶能訪問的頁面

        const filterRoutes = asyncRoutes.filter(route => {
          const routeName = route.children[0].name
          return menus.includes(routeName)
        })

        // 一定要在進入主頁之前去獲取用戶信息

        // addRoutes用來動態(tài)添加路由配置
        // 只有在這里設(shè)置了補充了路由配置,才可能去訪問頁面
        // 它們不會出現(xiàn)左側(cè)
        router.addRoutes(filterRoutes)

        // 把它們保存在vuex中,在src\layout\components\Sidebar\index.vue
        // 生成左側(cè)菜單時,也應(yīng)該去vuex中拿
        store.commit('menu/setMenuList', filterRoutes)
      }
vue動態(tài)路由,vue.js,前端,javascript,Powered by 金山文檔

問題

如果我們刷新瀏覽器,會發(fā)現(xiàn)跳到了404頁面

對于addRoute添加的路由,在刷新時會白屏

原因

現(xiàn)在我們的路由設(shè)置中的404頁處在中間位置而不是所有路由的末尾了。

解決

把404頁改到路由配置的最末尾就可以了

vue動態(tài)路由,vue.js,前端,javascript,Powered by 金山文檔
 filterRoutes.push({ path: '*', redirect: '/404', hidden: true }) 
//解決刷新去404頁面
 // 解決刷新出現(xiàn)的白屏bug
  next({
    ...to, // next({ ...to })的目的,是保證路由添加完了再進入頁面 (可以理解為重進一次)
    replace: true // 重進一次, 不保留重復歷史
  })

效果如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-791299.html

vue動態(tài)路由,vue.js,前端,javascript,Powered by 金山文檔

到了這里,關(guān)于vue 實現(xiàn)動態(tài)路由的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 前端vue打包時遇到‘default‘ is not exported by node_modules/vue/dist/vue.runtime.esm-bundler.js, imported by

    前端vue打包時遇到‘default‘ is not exported by node_modules/vue/dist/vue.runtime.esm-bundler.js, imported by

    主要原因是由于用到的組件進行npm i時默認使用的是vue2,不支持vue3,但是前端框架使用的是vue3,所以導致重構(gòu)編碼時會報錯, 網(wǎng)上查詢說 ????????當我們在使用rollup編譯es6時,可能會遇到以下報錯問題,需要 安裝@rollup/plugin-commonjs插件 npm install @rollup/plugin-commonjs 最后,

    2024年02月05日
    瀏覽(27)
  • Vue.js:Vue-Router動態(tài)路由從服務(wù)器接口獲取路由數(shù)據(jù)

    文檔 https://v3.router.vuejs.org/zh/installation.html 版本號 有幾種方式實現(xiàn)動態(tài)路由: 前端配置 完整路由 ,通過接口返回的數(shù)據(jù)判斷是否可顯示,是否可訪問 前端配置 部分路由 ,由后端接口返回的數(shù)據(jù)生成新路由 拋開路由的思維,是否能直接通過 url查詢參數(shù) 或者是 動態(tài)路徑參數(shù)

    2024年02月08日
    瀏覽(86)
  • 前端實現(xiàn)動態(tài)路由(前端控制全部路由,后端返回用戶角色)

    前端實現(xiàn)動態(tài)路由(前端控制全部路由,后端返回用戶角色)

    優(yōu)點: 不用后端幫助,路由表維護在前端 邏輯相對比較簡單,比較容易上手 權(quán)限少的系統(tǒng)用前端鑒權(quán)更加方便 缺點: 線上版本每次修改權(quán)限頁面,都需要重新打包項目 大型項目不適用 如果需要在頁面中增加角色并且控制可以訪問的頁面,則不能用前端鑒權(quán) 1、前端定義靜態(tài)

    2024年02月10日
    瀏覽(17)
  • Discuz論壇網(wǎng)站標題欄Powered by Discuz!版權(quán)信息如何去除或是修改?

    Discuz論壇網(wǎng)站標題欄Powered by Discuz!版權(quán)信息如何去除或是修改?

    當我們搭建好DZ論壇網(wǎng)站后,為了美化網(wǎng)站,想把標題欄的Powered?by?Discuz!去除或是修改,應(yīng)該如何操作呢?今天飛飛和你分享,在操作前務(wù)必把網(wǎng)站源碼和數(shù)據(jù)庫都備份到本地或是網(wǎng)盤。 ? Discuz的版權(quán)信息存在兩處地方,一個是標題欄,一個是底部。一般為了美化修改個標

    2024年02月08日
    瀏覽(97)
  • 【JavaScript】JS實用案例分享:動態(tài)生成分頁組件 | 通過按鍵實現(xiàn)移動控制

    【JavaScript】JS實用案例分享:動態(tài)生成分頁組件 | 通過按鍵實現(xiàn)移動控制

    CSDN話題挑戰(zhàn)賽第2期 參賽話題:學習筆記 ??? NodeJS專欄:Node.js從入門到精通 ??? 博主的前端之路( 源創(chuàng)征文一等獎作品 ):前端之行,任重道遠(來自大三學長的萬字自述) ??? TypeScript知識總結(jié):TypeScript從入門到精通(十萬字超詳細知識點總結(jié)) ????? 個人簡介

    2023年04月21日
    瀏覽(30)
  • 路由原理及vue實現(xiàn)動態(tài)路由

    在前端開發(fā)中,路由通常用于實現(xiàn) SPA 應(yīng)用程序,即在一個頁面中切換不同的內(nèi)容或頁面,而不需要重新加載整個頁面。路由的實現(xiàn)原理是通過監(jiān)聽 URL 的變化,然后根據(jù)不同的 URL 加載不同的內(nèi)容或頁面。 在前端框架中,例如 Vue,路由通常是通過路由庫來實現(xiàn)的。路由庫提

    2024年02月06日
    瀏覽(19)
  • 【前端】在Vue2中使用Vanta.js炫酷動態(tài)背景(全屏背景)

    【前端】在Vue2中使用Vanta.js炫酷動態(tài)背景(全屏背景)

    官網(wǎng):https://www.vantajs.com/ 由于博主在參考官網(wǎng)及官方GitHub進行應(yīng)用時遇到一些問題,因此寫了該篇博客,以避免大家因找Bug而浪費時間,方便快速的應(yīng)用。 注意版本 Vue的版本如下 “vue”: “^2.6.14” 渲染容器 導包 方法 完整代碼: 完整代碼: 參加顏色參數(shù) 如果報錯:‘X

    2024年02月11日
    瀏覽(33)
  • vue 實現(xiàn)動態(tài)路由

    vue 實現(xiàn)動態(tài)路由

    vue-router對象中的 addRoutes ,用它來動態(tài)添加路由配置 格式: 舉個例子: 我是以 vue-admin-template 為例,做如下演示: 在router/index.js中的路由配置中 只保留靜態(tài)路由(因為我們要動態(tài)的添加)) 在permission.js中引入,并使用addRoutes動態(tài)添加 這個是 router 下的 index.js中定義的 靜態(tài)

    2024年02月01日
    瀏覽(23)
  • Vue實現(xiàn)動態(tài)路由

    Vue實現(xiàn)動態(tài)路由

    目錄 前言 一、項目介紹 1.開發(fā)環(huán)境 2.功能 3.項目運行截圖?? 二、實現(xiàn) 1.動態(tài)路由如何實現(xiàn) 2.項目目錄介紹 3.核心代碼 4.坑和知識點 小結(jié) 最近在學權(quán)限相關(guān)的管理項目,前端用到了動態(tài)路由,就是根據(jù)用戶角色顯示不同的菜單,動態(tài)添加路由。說著好像很簡單,但看了很多

    2024年02月06日
    瀏覽(20)
  • (C#) IIS 響應(yīng)標頭過濾敏感信息(如:Server/X-Powered-By等) 運維知識

    (C#) IIS 響應(yīng)標頭過濾敏感信息(如:Server/X-Powered-By等) 運維知識

    再一次凈網(wǎng)行動中,客戶要求安全改造發(fā)現(xiàn)了接口請求的header標頭中出現(xiàn)如圖中的敏感信息。 ? 其意義在于告知瀏網(wǎng)站是用什么語言或者框架編寫的。解決辦法就是修改該響應(yīng)頭為一個錯誤的值,將攻擊者導向一個錯誤的方向。 這里只說windows 的iis環(huán)境,不考慮其他服務(wù)器的

    2024年02月11日
    瀏覽(115)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包