下拉框一下子请求上万条数据导致请求超时,我们可以使用分页请求,当el-select滚动触底的时候可以触发请求下一页。
1.在src目录下新建directive/loadMore/loadMore.js
2.loadMore.js内容:
指令代码
import Vue from 'vue'
export default {}.install = (Vue, options = {}) => {
Vue.directive('loadmore', {
inserted(el, binding) {
// 获取element-ui定义好的scroll盒子
const SELECTDOWN_DOM = el.querySelector('.el-select-dropdown .el-select-dropdown__wrap')
SELECTDOWN_DOM.addEventListener('scroll', function() {
const CONDITION = this.scrollHeight - this.scrollTop <= this.clientHeight
if (CONDITION) {
binding.value()
}
})
}
})
}
3.在main.js中引入该文件。例如:
import loadMore from '@/directive/loadMore/loadMore' // 下拉加载更多
Vue.use(loadMore);
这样就能在全局使用该指令了
4.使用
<el-select
v-loadmore="这里是你自己定义的函数"
>
</el-select>
还可以配上远程搜
HTML
<el-select
filterable
remote
:remote-method="remoteMethod"
>
</el-select>
Js
//远程获取供应商
async remoteMethod(query){
const { content } = await findAll({
name:query,
currentPage: 1,
limit: 200,
});
let dataList = content.content;
for (let i = 0; i < dataList.length; i++) {
for(let j =0 ;j < this.merchantList.length ; j++){//删除全部重复的
if(this.merchantList[j].value == dataList[i].id){
this.merchantList.splice(j,1)
}
}
this.merchantList.unshift({ id: dataList[i].id, name: dataList[i].name });//再将最新的插入到第一位
}
},