999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

VUE中動態菜單的遞歸實現

2019-10-21 07:31:14董洪蒙
科學與財富 2019年32期

董洪蒙

摘 要:前端開發是系統的臉面,國內開源JS框架VUE表現優異,很多前端開發者都采用它來實現業務系統界面。本篇文章來源于開發實戰,如何實現一個精致、可拓展動態菜單,并闡述了開發思路、開發技術,展示了精煉后的核心代碼,以期為前端開發者提供開發思路,共同集思廣益。

關鍵詞:VUE,vue-router,菜單,遞歸實現

VUE作為國產優秀的構建用戶界面的漸進式JS框架,它是以數據驅動和組件化的思想構建的。VUE與國外類似的框架相比,提供了更加簡潔的API,能很快地上手,是創建項目的首選前端框架。

筆者在為某政府機關開發一套小型業務系統,采用VUE作為前端框架,且采用了vue-router路由組件、vuex數據組件,主體上使用螞蟻金服的ant design vue作為界面實現的組件庫。采用的業務系統非常流行的頂部-側邊-通欄布局,感覺其中的難點在于菜單的實現,因為各個用戶因角色身份的不同,我們希望實現與其權限所對應的菜單,由此必須通過AJAX技術動態從服務端取得動態菜單條目,并填充到界面中。假定通過axios從后端取得如下JSON菜單數據:

"routes": [

"path": "/",

"component": () =>

import(/* webpackChunkName: "layout" */ "./layouts/BasicLayout"),

"children": [

{

"path": "/",

"redirect": "/dashboard/analysis"

},

{

"path": "/dashboard",

"name": "dashboard",

"meta": {

"icon": "dashboard",

"title": "儀表盤",

"authority": ["admin", "user"]

},

}

...

很明顯,是在后端開發時根據用戶不同,生成不同的菜單數據,路徑下的meta字段,包括了authority,以表示顯示當前表單項的相關有權限用戶。同時也很看出我們要采用VUE的vue-router插件,以控制點擊菜單時在layout中出現的不同content組件,實現SPA效果。因為里邊有children子菜單的出現,所以要采用遞歸算法來動態生成相關的菜單表項,下面列出./layouts/SilderMenu/index.vue的模板實現:

可見要在JS代碼中提供menuData等相關數據:

data() {

const menuData = this.getMenuData(this.$router.options.routes)

return {

menuData,

}

},

getMenuData方法是獲取由服務端取得相關JSON數據渲染到實現菜單組件中,在methods中實現:

getMenuData(routes = []) {

const menuData = []

for (let item of routes) {

if (item.meta && item.meta.authority) {

if (!check(item.meta.authority)) {

continue

}

}

if (item.name && !item.hideInMenu) {

const newItem = { ...item }

delete newItem.children

if (item.children && !item.hideChildrenMenu) {

newItem.children = this.getMenuData(item.children)

} else {

}

menuData.push(newItem)

} else if (

!item.hideInMenu &&

!item.hideChildrenMenu &&

item.children

) {

menuData.push(

...this.getMenuData(item.children),

}

}

return menuData

},

這段代碼十分復雜,有以下幾點值得注意:

* check(item.meta.authority)是檢查當前用戶是否顯示該菜單的判斷;

* 通過JSON菜單數據的hideMenu, hideChildMenu值,以判斷是否顯示在菜單中,因為我們是通過vue-router來推送路徑的,有的路徑不需要再現在菜單中,如404、登錄注冊頁面等。

* 根據菜單數據中children數據,采用遞歸調用方法,簡化了算法邏輯。

從./layouts/SilderMenu/index.vue中的

與SubMenu交互中,只需要通過VUE的props傳送已解析的菜單數據即可,即:menu-info="item"這段代碼。

菜單組件的實現,主要采用了唐金洲Vue開發實戰中的開發思路,是這段業務系統開發中花費時間較多的,邏輯也相對比較復雜的一段代碼,綜合運用了多種前端開發的前沿知識,本人也無法貼出所有代碼,細講所有的知識點,因為里邊涉及的東西太多了。有需要的可與我聯系,我們共同進步和提高。

參考文獻:

[1]唐金洲.Vue 開發實戰[EB/OL].北京:ant-design-vue官網.2019-5-1

[2]肖睿,龍穎.Vue 企業開發實戰[M].北京:人民郵電出版社.2018-12-01

主站蜘蛛池模板: 中文字幕有乳无码| 亚洲人成影院午夜网站| 性网站在线观看| 中文字幕伦视频| 凹凸国产分类在线观看| 自拍中文字幕| 亚洲国产欧美国产综合久久| 无码日韩精品91超碰| 精品国产成人av免费| 久久黄色一级视频| 大学生久久香蕉国产线观看| 青青草原国产免费av观看| 国模私拍一区二区| 国产人妖视频一区在线观看| 国产熟睡乱子伦视频网站| www成人国产在线观看网站| 在线看AV天堂| 欧美一级色视频| 九九视频免费在线观看| 国产18在线播放| 无码人中文字幕| 伊人色在线视频| 18禁黄无遮挡网站| 成人在线不卡视频| 99无码熟妇丰满人妻啪啪| 国产成人高清精品免费| 国产成人综合久久| 精品国产aⅴ一区二区三区| 国产精品久久国产精麻豆99网站| 黄色免费在线网址| 99久久亚洲综合精品TS| 国产香蕉国产精品偷在线观看| 免费中文字幕在在线不卡| 亚洲小视频网站| 国产一区二区三区在线精品专区| 精品撒尿视频一区二区三区| 国产亚洲日韩av在线| 色AV色 综合网站| 中文字幕波多野不卡一区| 毛片视频网址| 亚洲精品无码av中文字幕| 毛片最新网址| 丁香婷婷激情网| 亚洲欧美成aⅴ人在线观看| 日韩成人在线网站| 青草娱乐极品免费视频| 九色在线视频导航91| 欧美日韩一区二区三| 国产微拍一区二区三区四区| 久久成人免费| 激情无码视频在线看| 亚洲日韩AV无码一区二区三区人| 精品国产成人国产在线| 国产成人综合亚洲欧美在| 成人午夜视频网站| 99性视频| 婷婷丁香在线观看| 亚洲第一成人在线| 国产综合色在线视频播放线视| 尤物在线观看乱码| 久久99国产综合精品1| 91精品国产无线乱码在线| 色综合天天操| 精品国产免费观看一区| 在线观看91精品国产剧情免费| 日韩高清一区 | 国产va视频| 岛国精品一区免费视频在线观看 | 日韩黄色大片免费看| 亚洲精品无码人妻无码| 午夜福利在线观看入口| 一本大道香蕉中文日本不卡高清二区| 91小视频在线观看| a在线观看免费| 重口调教一区二区视频| 亚洲最大看欧美片网站地址| 国产成人久视频免费| 午夜啪啪福利| 欧美午夜在线播放| 国产91透明丝袜美腿在线| 欧美精品1区| 国产无吗一区二区三区在线欢|