Element-ui 级联选择器组件功能扩展

上周,在开发过程中碰见一个需求,总结一下就是:在使用Element-ui级联选择器组件的时候,数据既要懒加载,又能单击选中任意一项。

刚开始我还不以为意,认为是个很简单的需求,信誓旦旦的和产品经理说保证完成任务。

在我吭哧吭哧写完懒加载功能的时候,发现只能选中最后一项!顿时我就有点慌了,一查文档,发现懒加载触发事件active-item-change仅在 change-on-select(是否允许选择任意一级的选项) 为 false 时可用。

然后就开启了我的填坑之旅...

问题描述

在使用Element-ui级联选择器组件的时候,如果使用了懒加载功能,就不能单击选中任意一项。

解决思路

利用elementUI提供的active-item-change事件获取当前的选择的路径数组pathArray。
通过绑定当前事件,构造出select(item,menuInde​​x)需要的数据结构:

item:{
  value: 1,
  label: "vae"
}
menuIndex = pathArray.length - 1

这就可以实现hover展开,click选中的效果。

代码实现

template.png

methods.png

注:"element-ui": "^2.4.11"

总结

坑已填完,希望大家以后遇到这个问题可以很好的解决它。

已有 8 条评论
  1. Lavender Lavender

    哇~黄老师好厉害呀~❤ ❤ ❤

  2. 小朱 小朱

    您好。我也遇到这个需求。很庆幸搜索到您的总结。但是遇到两个问题:1。this.$refs.cascader.menu这步显示undefined。2.cascader.select()这个方法是在elementui看到的吗,我没找到。

    1. Vae Vae

      首先,你先确定一下你的el-cascader标签里面的ref="cascader",这个里面定义的ref属性名称cascader是否对应,然后console打印this.$refs.cascader这个的值出来看看,打印的值里面你可以看到menu属性,menu属性里面有定义select方法。

  3. 小朱 小朱

    检查过了。this.$refs.cascader对象没有menu这个字段。想哭。log是undefined。使用的是elementui2.9.2版本

    1. Vae Vae

      我使用的是elementui2.4.11版本,我试了一下2.9.2版本确实没有menu属性,如果一定要这个功能,建议换2.4.11版本;2.9.2版本我看了一下,暂时还没找到实现这个功能的方法。

      1. 小朱 小朱

        感谢特地验证后回复。项目中有其他组员需要新版本的elementui组件,所以之前我把依赖包升级成了2.9.2方便他们使用,再换回去估计他们不太方便。刚刚实现的方案是,获取document.querySelectorAll('.el-cascader-node.in-active-path .el-cascader-node__label'),手动拼接label的值显示在el-cascader的input内,再将层级id组赋值在el-cascader的model中,偏原生,没有menu属性用起来优雅,先这样把。再次感谢回复。鞠躬~

        1. Vae Vae

          嘿嘿,共同进步~

添加新评论