使用vue-infinite-scroll实现无限滚动加载
程序员文章站
2022-03-29 08:14:06
...
安装
npm i vue-infinite-scroll -D
引入
有两种方式,一个是全局,一个是在单个组件中引入,我采用的是后者
//全局
import infiniteScroll from 'vue-infinite-scroll'
Vue.use(infiniteScroll)
//单个组件
import infiniteScroll from 'vue-infinite-scroll'
export default {
directives: { infiniteScroll }
}
使用
<div v-infinite-scroll="loadMore" infinite-scroll-disabled="busy" infinite-scroll-distance="10">
<!---loading及无数据的效果--->
<div v-loading="!busy" class="loading"/>
<div v-if="listData.length ===0 " style="text-align: center">暂无数据</div>
</div>
<script>
import infiniteScroll from 'vue-infinite-scroll'
export default {
directives: { infiniteScroll },
data() {
return {
busy: true,
listData: [],
listQuery: {
currentPage: 0,
pageSize: 10
},
}
},
methods: {
getList(flag) {
var _this = this
fetchList(this.listQuery).then(function(res) {
if (res.code === 0) {
if (flag) {
//flag为true时 拼接数组
_this.listData = _this.listData.concat(res.payload.list)
//若当前页已经是最后一页,将busy设置为true,不再执行loadMore,否则设置为false
if (_this.listQuery.currentPage + 1 >= res.payload.totalPages) {
_this.busy = true
} else {
_this.busy = false
}
} else {
_this.listData = res.payload.list
_this.busy = false
if (res.payload.list.length === 0 || res.payload.totalPages === 1) {
//若无数据(接口返回list长度为0)或只有一页数据(接口返回字段totalPages为1),将busy设置为true,不再执行loadMore
_this.busy = true
}
}
}
})
},
loadMore() {
this.busy = true
setTimeout(() => {
this.listQuery.currentPage++
this.getList(true)
}, 500)
},
}
}
</script>
- busy的值为true就不再加载,为false时持续加载
- infinite-scroll-distance=“10” 表示距离底部10时就触发loadMore方法
- 在getList方法中传入一个参数flag,判断是否拼接函数,
- fetchList是封装的axios get请求,项目采用后台分页,listQuery是分页参数,其中currentPage(从0开始)代表当前页数;pageSize代表一页显示条数
上一篇: vue的pc端滚动加载分页
下一篇: 常见a标签的错误及解决办法