问题:vue3 element-plus el-dropdown二级菜单 点击菜单项菜单列表显隐问题

 

一、问题描述

在使用el-dropdown实现二级菜单时,当点击二级菜单项时一级菜单列表会消失,这与需求相违背了!!

二、解决方案

利用dom操作来控制菜单列表的显示与隐藏(注:以下是利用vue3+element-plus+组合式API实现)

  •  html部分:
<el-dropdown trigger="click" :hide-on-click="false" ref="operationDropdownMenuRef">
      <el-button type="primary" plain>二级下拉菜单</el-button>
      <template #dropdown>
        <el-dropdown-menu >
          <el-dropdown-item>
            <el-dropdown ref="operationDropdownMenuItem" placement="left-start"  trigger="click" :hide-on-click="false">
              <span @click="operationDropdownShow()">小狐狸</span>
              <template #dropdown>
                <el-dropdown-menu >
                  <!-- 下面的div是为了使页面点击时第一个菜单项不会消失 -->
                  <div @click="operationDropdownShow()">
                    <p style="margin-left:10px">在这里面你想写什么都可以:</p>
                    <el-checkbox-group v-model="state.checkList"> 
                      <el-row :gutter="24">
                        <el-col :span="8"  v-for="(item, index) in state.dataList" :key="index"> 
                            <el-dropdown-item><el-checkbox  :label="item.prop">{{item.label}}</el-checkbox></el-dropdown-item>
                        </el-col> 
                      </el-row>
                    </el-checkbox-group>  
                  </div>
                </el-dropdown-menu>
              </template>
            </el-dropdown>
          </el-dropdown-item>
          <el-dropdown-item>
            <div @click="restoreDefault()">玫瑰花</div>
          </el-dropdown-item>
        </el-dropdown-menu>
      </template>
    </el-dropdown>
  • 数据部分:
  checkList: [],
    dataList: [
        {
          label: "绒绒",
          prop: "hrr",
        },
        {
          label: "壳哥",
          prop: "hkk",
        },
        {
          label: "卷儿",
          prop: "hjj",
        },
      ],
  • 实现方法:(不知道vue3的写法为什么会没有show和hide方法 这边找了半天才发现onOpen和onClose
 const operationDropdownMenuRef = ref(null)
    const operationDropdownShow = () => {
      operationDropdownMenuRef.value.popperRef.onOpen()
      // 如果是vue2的写法.show()
      // this.$ref.operationDropdownMenuRef.show()
    }
    const restoreDefault = () => {
      operationDropdownMenuRef.value.popperRef.onClose()
      // 同上 .hide()
      // this.$ref.operationDropdownMenuRef.hide()
    }

三、效果图

 

posted @ 2022-12-08 15:44  ling'er  阅读(3728)  评论(1编辑  收藏  举报