vue-element-template动态菜单

当我们在做动态菜单的时候,大多数都是利用递归处理,在用递归处理菜单数据结构的时候,很容易忽略菜单组件SidebarItem渲染规则,它的规则是有children就渲染为多级菜单

但是像首页菜单怎么办呢,它只有一级,而不是像系统管理这样多级的

其实只需要在递归之前判断一下children属性的长度是否等于0,等于0就删除children属性,或者children赋值为undefined

动态菜单:

// 转换为router路由需要的数据结构
// list为后端菜单接口的树形数据
function filterRouter(list) {
  const routes = []

  list.forEach(item => {
    // 重点
    if(item.children.length === 0) {
      // item.children = undefined
      delete item.children
    }
    
    routes.push({
      path: item.url,
      component: component(item),
      redirect: redirect(item),
      name: item.url,
      meta: { title: item.name, icon: item.url},
      // 判断children是否存在,上面删除children后会导致forEach的报错
      children: item.children && filterRouter(item.children)
    })
  })
  
  return routes
}

// 处理redirect
function redirect(item) {
  if(item.children && item.children.length !== 0) {
    return item.children[0].url
  }
  return ''
}

// 处理component
function component(item) {
  if(!item.parent_id) {
    // Layout是组件
    return Layout
  }
  return loadView(item.url)
}

// 路由懒加载
function loadView(view) {
  return (resolve) => require([`@/views${view}`], resolve)
}

vue-element-template是一个具有Element UI,axios,iconfont,权限控制和lint的最小vue管理员模板。它是在vue-cli上构建的v4.0版本。如果你想使用旧版本,可以将分支切换到相应的版本。你可以通过克隆项目来使用它,并按照相关文档或演示来了解如何使用它。该模板是基于vue-element-admin开发的,但是它去除了一些实际业务用不到的东西,更适合作为基础模板进行开发。它还解决了动态路由的问题,可以根据不同用户的登录状态展现不同的菜单。你可以参考相关文档和示例来了解如何使用vue-element-template进行演示。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [vue-element-template学习](https://blog.csdn.net/koogo/article/details/124338359)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [vue-element-admin-template](https://download.csdn.net/download/weixin_42142062/15991791)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [vue-element-template框架,动态添加路由进行菜单渲染的实现(手把手教程)](https://blog.csdn.net/qq_36873710/article/details/124430511)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值