赞
踩
最近做项目经常用到 el-Cascader 这个级联选择器,也是踩过好过坑,这里记录下自己踩的坑。
先说一下问题:
当在鼠标移动到 组件
位置触发子菜单后,再移动到 指南
位置,但是 组件
的子级菜单并没有收起 ,如此移来移去,让人感觉就像是 指南
下面有子级菜单,其实指南并没有子级菜单。
1. 总结一句话:移到父菜单 相应子菜单出现 没有子菜单 则所有子菜单消失
2. 解决办法
slot-scope
插槽获取 node 和 data 去渲染,不要使用 :options
去做渲染node.isLeaf
判断是不是有子级菜单,为 true 就是没有,false就是存在子级菜单.el-cascader-menu
dom元素的显示隐藏来实现3. 实现代码
html
<template> <el-cascader ref="refSubCat" :show-all-levels="false" :options="allSubCatList" :props="subCatProps" @change="handleSubCat" clearable expand-trigger="hover" v-model="subCatValue" popper-class="subCat" > <template slot-scope="{ node, data }"> <span class="tag" v-if="node.isLeaf" @mouseenter="mouseenterSubcat(node)" @mouseleave="mouseleaveSubcat(node)" >{{ data.className }}</span> <span v-if="!node.isLeaf">{{ data.className }}</span> </template> </el-cascader> </template>
部分核心的js代码,通过移入移除控制
<script> export default { data(){ return:{ allSubCatList: [], // 工单分类列表 subCatProps: { value: "id", label: "className", children: "subcat" }, // 格式化映射工单信息 } }, created() { this.getAllSubCatList(); }, methods: { // 移入事件 mouseenterSubcat(node) { // 获取dom 元素,他是一个数组 var el_l = document.querySelectorAll( ".el-popper.el-cascader__dropdown.subCat .el-cascader-panel .el-cascader-menu" ); if (el_l[node.level] && el_l.length > 0) { if (node.level == 1) { el_l[node.level].style.display = "none"; if (el_l[node.level + 1]) { el_l[node.level + 1].style.display = "none"; } } else if (node.level == 2) { el_l[node.level].style.display = "none"; } else { el_l[node.level].style.display = "none"; } }else{ console.log(111) } }, // 移出事件 mouseleaveSubcat(node) { var el_l = document.querySelectorAll( ".el-popper.el-cascader__dropdown.subCat .el-cascader-panel .el-cascader-menu" ); if (el_l[node.level] && el_l.length > 0) { if (node.level == 1) { el_l[node.level].style.display = "block"; } else if (node.level == 2) { el_l[node.level].style.display = "block"; } else { el_l[node.level].style.display = "block"; } } }, // 获取data数据 getAllSubCatList() { this.$axios.get(this.$httpServer.getSubCats, {}).then(res => { if (res && res.data.code == "0") { this.allSubCatList = res.data.data; } }); }, } } </script>
css,主要是设置为块级,解决有的空白区域移入移除事件没有触发问题
.el-popper.el-cascader__dropdown.subCat .el-cascader-node__label .tag{
display: block;
width: 100%;
height: 100;
}
4. 最后看下效果
(gif录屏 有色差,效果都是可以的)Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。