AntDesingVue select下拉框中数据量过多,响应慢。使用popupScroll,下拉加载更多
在做公司的项目时,需要将行政区与区块联系下拉,导致加载的数据过多,页面响应慢,因此可以考虑使用分页的方式,用户在下拉到底部时加载更多的数据,一直到数据加载完。
ant design for vue 的select提供了popupScroll方法
具体的实现如下
<a-select
style="width: 100%"
show-search
placeholder="请选择"
search-placeholder="请选择"
:dropdown-style="{ maxHeight: '240px', overflow: 'auto' }"
:value="value"
@change="onChange"
@search="searchChange"
@popupScroll="popupScroll"
:filter-option="false"
not-found-content="暂无数据"
>
<a-select-option v-for="item in treeData" :key="item.code" :data="item" :value="item.code" :title=" item.pathName">
{{ item.pathName}}
</a-select-option>
</a-select>
pageSize: 10, // 分页
pageNumber: 1,
getListDataCode(code = '') { // 获取树节点
let self = this;
this.$post(self.$api.getCompanyList,
{
code: code,
systemCode: 'SYSTEM',
fullName:self.searchName,
pageNumber: this.pageNumber,
pageSize: this.pageSize,
}).then((res) => {
if(res.code - 0 === 200) {
const resData = (res.data && res.data) || []
this.pages= res.data.pages;
if(this.treeData.length <= resData.total){
this.treeData.push(...resData.records);
}
}
})
},
// 文本框的值变化是
searchChange(searchValue){
this.searchName = searchValue
if(this.searchName){
this.treeData = []
this.pageNumber = 1;
this.getListDataCode(this.parentCode)
}
},
// 选中时调用
onChange(value,e){
this.searchName = value;
let data = e && e.data && e.data.attrs && e.data.attrs.data
this.$emit('select', {...data, value, name: data.pathName})
},
popupScroll(e){
const {target} = e;
const scrllHeight = target.scrollHeight - target.scrollTop;
const clientHeight = target.clientHeight;
// 下拉框不下拉的时候
if(scrllHeight ===0 && clientHeight ===0){
this.pageNumber = 1;
} else if(scrllHeight - clientHeight == 0){ // 下拉到底部时
if(this.pageNumber < this.pages){
// 如果滑到底部,则加载下一页
this.pageNumber++
this.getListDataCode(this.parentCode)
}
}
}

浙公网安备 33010602011771号