2021-1-14 关于递归生成el-menu的踩坑

关于递归生成el-menu

遇见的问题

递归生成menu是没有问题的

<template>
  <el-submenu
    v-if="isDropDownMenu(routerData)"
    :index="routerData.path"
  >
    <template v-slot:title>
      {{ getMenuLabel(routerData) }}
    </template>
    <MenuItem
      v-for="(item, itemIndex) in routerData.children"
      :key="itemIndex"
      :routerData="item"
    />
  </el-submenu>
  <el-menu-item
    :index="routerData.path"
    v-else
  >
    {{ getMenuLabel(routerData) }}
  </el-menu-item>
</template>

<script>

export default {
  name: 'MenuItem',
  props: ['routerData'],
  // created() {
  //   console.log(this.routerData);
  // },
  methods: {
    isDropDownMenu(data) {
      return data.children && data.children.length > 1;
    },

    getMenuLabel(data) {
      return data.meta.breadcrumb.label;
    },
  },
};
</script>

<style>
</style>

在这里插入图片描述

但是当鼠标hover到生成的el-submenu上时会报错
在这里插入图片描述

尝试解决

在el-submenu外层加上div

<div v-if="isDropDownMenu(routerData)">
<el-submenu
    :index="routerData.path"
    :popper-append-to-body="false"
  >
    <template v-slot:title>
      {{ getMenuLabel(routerData) }}
    </template>
    <MenuItem
      v-for="(item, itemIndex) in routerData.children"
      :key="itemIndex"
      :routerData="item"
    />
</el-submenu>
</div>

可以解决, 但是有样式问题,因为外层包了div
在这里插入图片描述
但是调一下样式也是可以用的

觉得应该有别的解决方法,然后就发现了这个解决方法

<el-submenu
    v-if="isDropDownMenu(routerData)"
    :index="routerData.path"
    :popper-append-to-body="false"
  >

加上:popper-append-to-body="false"后,完美解决报错,不用包div,也不用改样式了
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值