• 【element-plus】解决el-cascader在懒加载模式 使用filterable无法搜索


    今天产品让我给cascader级联选择器加个可搜索,我寻思这还不简单,直接加个filterable就行了。结果因为这个cascader使用了懒加载来进行多层级的请求,filterable并不能正常使用,输入什么都显示没有数据。

    麻烦的是change事件也完全不响应这个搜索值的变化,只会在组件有选中项的时候触发。查询资料后,我找到这个属性:

    这个钩子函数里能获取filterable的搜索值,并通过return true或false来开启或关闭默认的搜索行为。可有个问题是beforeFilter在搜索值为空时也不会触发,最终我只好通过监听里面input框的dom来实现搜索的清空还原。

    完整方案如下:

    1. <el-cascader class="user-cascader" ref="classify" v-model="data.curItem2"
    2. :options="data.options2" :props="data.props2" @change="handleChange2" filterable clearable :before-filter="beforeFilter" />
    1. onMounted(() => {
    2. // 获取data.options2 并备份一个data.options2Copy
    3. // getList()
    4. // 监听搜索框的dom
    5. nextTick(() => {
    6. let dom = document.getElementsByClassName('user-cascader')[0]
    7. let inputDom = dom.getElementsByClassName('el-cascader__search-input')[0] // 搜索框
    8. inputDom.addEventListener('input', (e) => {
    9. console.log(e.target.value)
    10. const value = e.target.value
    11. if (!value) {
    12. clear()
    13. }
    14. })
    15. })
    16. });
    17. function beforeFilter(value) {
    18. data.keyWord = value?.trim()
    19. console.log(data.keyWord)
    20. // 手动筛选
    21. data.options2 = data.options2.filter(v => v.label.indexOf(data.keyWord) > -1)
    22. // 空的时候显示默认的筛选无结果面板
    23. if (data.options2.length === 0) {
    24. return true
    25. }
    26. // 懒加载时默认筛选无效 直接禁用它 让组件加载我们手动筛选的数据
    27. return false
    28. }
    29. // 没搜索词时展示完整的原列表数据
    30. const clear = () => {
    31. data.keyWord = ''
    32. data.options2 = JSON.parse(JSON.stringify(data.options2Copy))
    33. }

  • 相关阅读:
    嵌入式属于人工智能吗?
    android12.0(S) 如何区分U盘和TF卡
    6.区块链系列之本地智能合约部署至测试网与主网
    推动产业数字化转型,六个方面引领变革
    Redis 核心知识点归纳总结,从根上理解 Redis
    【MySQL·水滴计划】第三话- SQL的基本概念
    【数据结构】用堆排序解决TOPK问题
    BeanFactory与ApplicationContext的区别
    【结构型】桥接模式(Bridge)
    云计算面试题【后期】
  • 原文地址:https://blog.csdn.net/qq_34718221/article/details/138190268