项目中在el-table中的索引栏添加了el-dropdown作为弹窗工具栏,并且需要悬浮这一行时就弹出,如下图:
最初通过添加refs属性在cell-mouse-enter中去调用el-dropdown组件实例的show以及hide方法,但当el-table-column添加了fixed属性后出现错位以及重复渲染的问题,原因是el-table实际为fixed行生成了两份实例,refs只能获取到隐藏的那一项的实例,故调用方法时调用的实际不是显示出来的实例的方法,导致定位错误,以及直接悬浮在dropdown时显示两个下拉选单
最初想通过直接操作dom,运用模拟事件触发mouseenter以及mouseleave事件开启和关闭,但是MouseEvent导致cell-mouse-enter以及cell-mouse-leave在切换行时错误的重复触发,难以解决,如下
所以通过ref直接获取表格实例,在表格实例中寻找子组件的实例触发,如下:
// 因使用fixed后,ref获取的不是实际显示出来的vue实例,故只能从fixedBodyWrapper中一层一层找,
// 实际渲染的元素基本不会变,如实际应用中有变化建议递归查找
this.$refs[`tableRef`].$refs['fixedBodyWrapper'].firstElementChild.children[1].children[rowIndex].children[0].children[0].children[0].__vue__.show()
添加其他配置或者自定义其他项目后可能会导致位置变化,但我这里是封装好的基本不会有变动,所以偷懒了,实际应用建议可以通过递归查找自己的目标元素
或者也可以自行改写el-table的fixed的渲染方式,如:https://juejin.cn/post/7129129207220666382