vue 根据后端返回字段实现多层级菜单数据过滤?
AI 概述
菜单实现是用 elementui 的 el-menu 来实现的,因为我们是动态展示菜单的,所以这里需要对 el-menu 进行一个封装。
MenuTree.vue 组件封装:
<template>
<div>
<template v-for="(item, index) in this.menuData">
<!-- 情况一:有子集的情况 -->
<...
菜单实现是用 elementui 的 el-menu 来实现的,因为我们是动态展示菜单的,所以这里需要对 el-menu 进行一个封装。
MenuTree.vue 组件封装:
<template>
<div>
<template v-for="(item, index) in this.menuData">
<!-- 情况一:有子集的情况 -->
<el-submenu :key="index" :index="String(index + 1)" v-if="item.children && item.children.length > 0">
<template slot="title">
<i :class="[item.icon || 'el-icon-menu']" style="color: #000"></i>
<span slot="title" style="margin-left: 9px">{{item.menuName}}</span>
</template>
<left-menu-tree :menuData="item.children"></left-menu-tree>
</el-submenu>
<!-- 情况二:没子集的情况 -->
<el-menu-item :key="index" v-else-if="item.menuStatus && item.menuStatus == 1" :index="String(index + 1)">
<i :class="[item.icon || 'el-icon-menu']" style="color: #000"></i>
<span slot="title" style="margin-left: 9px">{{item.menuName}}</span>
</el-menu-item>
</template>
</div>
</template>
<script>
import { OPENTYPE } from "@/config/constant";
export default {
props: ['menuData'],
name: 'LeftMenuTree',
}
</script>
在页面中使用:
<div class="left-menu">
<el-menu
active-text-color="#303133"
class="el-menu-vertical"
text-color="#606266"
@open="handleOpen"
@close="handleClose"
>
<menu-tree :menuData="menuList"></menu-tree>
</el-menu>
</div>
这里后端返回的数据是否展示,是通过 menuStatus 字段来判断的,0 为隐藏菜单,1 为展示菜单。模拟数据如下:
const menuList= [
{
menuName: '菜单一',
menuStatus: 1,
children: [
{
menuName: 'ww',
menuStatus: 0,
},
{
menuName: 'rr',
menuStatus: 1,
children: [
{
menuName: 'tt',
status: 1,
children: [
{
menuName: 'ooo',
menuStatus: 0,
},
{
menuName: 'pp',
menuStatus: 1,
children: [
{
menuName: 'ooo',
menuStatus: 0,
},
{
menuName: 'pp',
menuStatus: 0,
},
]
},
]
},
{
menuName: 'rr',
menuStatus: 0,
},
]
},
]
},
{
menuName: '菜单二',
menuStatus: 1,
children: [
{
menuName: 'bb',
menuStatus: 0,
},
{
menuName: 'we',
menuStatus: 0,
},
]
},
{
menuName: '菜单三',
menuStatus: 1,
}
]
这里我们就需要通过一个一个过滤方法来过滤掉 menuStatus 为 0 的数据,显示状态为 1 的,过滤方法如下:
function filterMenuData(menuData) {
return menuData
.filter(item => item.menuStatus === 1)
.map(item => {
if (item.children) {
return {
...item,
children: filterMenuData(item.children)
};
} else {
return item;
}
});
}
this.menuList = filterMenuData(this.menuList);
至此,完美展示出我们的菜单,举一反三,特此记录。
以上关于vue 根据后端返回字段实现多层级菜单数据过滤?的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。
声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » vue 根据后端返回字段实现多层级菜单数据过滤?
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » vue 根据后端返回字段实现多层级菜单数据过滤?
微信
支付宝