千家信息网

vue如何对el-autocomplete二次封装增加下拉分页

发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,这篇文章主要介绍vue如何对el-autocomplete二次封装增加下拉分页,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!项目中的联想输入框现在都是采用的el-autocom
千家信息网最后更新 2025年01月18日vue如何对el-autocomplete二次封装增加下拉分页

这篇文章主要介绍vue如何对el-autocomplete二次封装增加下拉分页,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

项目中的联想输入框现在都是采用的el-autocomplete实现的,但是随着数据量越来越多,产品要求一次不要返回所有的联想数据,要做分页处理,所以需要添加一个分页的功能。

注:看懂下面的代码需要先对vue和element有一定的学习。

完整代码

下面对主要的地方进行讲解。

1.自定义指令实现下拉加载更多。

主要代码

// 自定义指令,监听下拉框的滚动,滚动到底部就加载下一页    scrollLoad: {      bind(el, binding, vnode) {        let wrapDom = el.querySelector('.el-autocomplete-suggestion__wrap')        let listDom = el.querySelector('.el-autocomplete-suggestion__wrap  .el-autocomplete-suggestion__list')        wrapDom.addEventListener(          'scroll',          e => {            // 注意load的使用,节流            let condition = wrapDom.offsetHeight + wrapDom.scrollTop + 10 - listDom.offsetHeight            if (condition > 0 && !vnode.context.loading) {              //滚动到底部则执行滚动方法load,binding.value就是v-scrollLoad绑定的值,加()表示执行绑定的方法              binding.value()            }          },          false        )      }

上面主要是运用了vue的自定义指令的bind钩子。不太了解的可以先看这个https://cn.vuejs.org/v2/guide/custom-directive.html 。bind有四个参数(el、binding、vnode、oldVnode)这里用前三个,el代表绑定的元素,用来操作dom,这里用来添加scroll事件,以及计算下拉框是否滑动到底部(注意计算中的+10高度);binding是一个对象,包含旧值、新值、指令名等,这里主要用绑定值value,用来执行加载更多的方法;Vnode指的是虚拟节点,这里取他的context即为this控制loading来节流。

2.增加props(getOptionFn、searchKey、value、placeholder)抽离业务。成为公共组件

  • getOptionFn为接口封装的方法。fetch-suggestions和加载更多里面都要用到

  • searchKey表示接口需要传的参数的key,不同的接口的key可能不一致。

  • value是外面v-modle的绑定值,注意在watch里面设置值,不知道的可以看看v-model的实现原理。

  • placeholder不解释

3.可能需要解释的

  • 在加载到更多数据后怎么把输入加到下拉里面?

this.$refs['autocomplete'].$data.suggestions // 下拉的列表
  • 怎么避免加载完了还加载更多。

这里是用的数量比较,也可以加一个标识符,加载完了设置为true,变化条件后设为false。

if(Number(this.pageTotal) <= this.$refs['autocomplete'].$data.suggestions.length) {    return  }

以上是"vue如何对el-autocomplete二次封装增加下拉分页"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

0