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

主站蜘蛛池模板: 国产办公室秘书无码精品| 九色在线观看视频| 亚洲天堂网视频| 欧洲极品无码一区二区三区| 日韩无码黄色网站| 精品国产网站| 国产在线欧美| 四虎亚洲精品| 国产精品男人的天堂| 狠狠色丁婷婷综合久久| 亚洲一区国色天香| 日韩精品一区二区三区视频免费看| 久久鸭综合久久国产| 亚洲五月激情网| 亚欧成人无码AV在线播放| www.youjizz.com久久| 国产在线无码一区二区三区| 国产一区二区网站| 亚洲无码精彩视频在线观看| 国产成人在线无码免费视频| 国产亚洲精品97AA片在线播放| 97视频在线精品国自产拍| 天天综合天天综合| 亚洲综合国产一区二区三区| 国产综合精品日本亚洲777| 亚洲国产精品日韩欧美一区| 激情网址在线观看| 亚洲男人天堂网址| 91精品国产情侣高潮露脸| 国产精品无码久久久久久| 成年人午夜免费视频| 在线观看国产黄色| 69av免费视频| 中文字幕有乳无码| 国产高清又黄又嫩的免费视频网站| 92午夜福利影院一区二区三区| 婷婷六月综合网| 亚洲aaa视频| 亚洲啪啪网| 久久精品亚洲热综合一区二区| 中文字幕 91| av尤物免费在线观看| 精品国产aⅴ一区二区三区| 久久精品一品道久久精品| 这里只有精品在线| 欧美成人二区| 亚洲欧美综合在线观看| 日韩一区二区在线电影| 四虎成人精品在永久免费| 日韩精品一区二区三区视频免费看| 亚洲欧洲自拍拍偷午夜色无码| a级毛片免费播放| 国产91在线|日本| 亚洲成a人片在线观看88| 人妻无码AⅤ中文字| 日韩福利在线视频| 91亚洲精品第一| 天堂av综合网| www精品久久| 久久九九热视频| 夜夜操狠狠操| 国产午夜不卡| 波多野结衣一区二区三视频| 免费亚洲成人| 爆乳熟妇一区二区三区| 99国产在线视频| 国产精品主播| 久久这里只有精品国产99| 国产9191精品免费观看| 九色综合视频网| 久久天天躁夜夜躁狠狠| 国产亚洲精品91| 欧美一级99在线观看国产| 国产毛片基地| 高清无码一本到东京热| 国产在线精品人成导航| 国产XXXX做受性欧美88| 免费一级毛片在线播放傲雪网| 国产一区二区人大臿蕉香蕉| 99在线观看视频免费| 国产无码制服丝袜| 国产主播在线一区|