Vue下实现element的select选择器下拉加载更多
select选择器实现下拉加载更多
可以将此细分为,1.下拉到底部; 2.触发请求; 3.加载,难点便只是在下拉到底部。
我们要想知道是否已经触底,首先找到拥有滚动条的元素 在select 添加 ref
<template>
<el-select v-model="value" ref="select" placeholder="请选择" :loading="loading">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</template>
<script>
export default {
name: "selectPage",
data(){
return{
}
},
mounted(){
console.log(this.$refs.select)
},
}
</script>
我们可以找到滚动条在此元素,接下来便好办了,监听滚动条滑动并添加事件
mounted(){
console.log(this.$refs.select)
this.$refs.select.$refs.scrollbar.$refs.wrap.addEventListener(scroll,this.scolling)
},
methods:{
scolling(){
let e = this.$refs.select.$refs.scrollbar.$refs.wrap
if(this.noMore) return
// 到底时触发 loadMore
let loadMore = e.scrollHeight - e.scrollTop <= e.clientHeight
if(loadMore){
this.loadMore()
}
}
}
以下贴出完整代码
<template>
<el-select v-model="value" ref="select" placeholder="请选择" :loading="loading">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</template>
<script>
export default {
name: "selectPiping",
props:{
api: String,
pageSize: {
type: Number , default : 10},
method: {
type: String , default: post},
params: {
type: Object , default: {
} }
},
data(){
return{
options: [{
value: 选项1,
label: 黄金糕
}, {
value: 选项2,
label: 双皮奶
}, {
value: 选项3,
label: 蚵仔煎
}, {
value: 选项4,
label: 龙须面
}, {
value: 选项5,
label: 北京烤鸭
}],
loading: false,
pageNo: 1,
noMore: false
}
},
mounted(){
this.$refs.select.$refs.scrollbar.$refs.wrap.addEventListener(scroll,this.scolling)
},
methods:{
scolling(){
let e = this.$refs.select.$refs.scrollbar.$refs.wrap
if(this.noMore) return
let loadMore = e.scrollHeight - e.scrollTop <= e.clientHeight
if(loadMore){
this.loadMore()
}
},
loadMore(){
if(this.loading) return
this.loading = true
let {
api,method,params,pageNo,pageSize} = this
Object.assign(params,{
pageNo,pageSize})
this.http({
url:api, config: {
method:method , params:params }}).then((res)=>{
if(pageNo === res.totalPage){
// 获取到最后的值时,不再监听滚动条的动作,移除滚动事件
this.$refs.select.$refs.scrollbar.$refs.wrap.removeEventListener(scroll,this.scolling())
this.noMore = true
}
this.pageNo++
this.options.push(res)
}).finally(()=> this.loading = false)
}
}
}
</script>
<style scoped>
</style>
上一篇:
IDEA上Java项目控制台中文乱码
