vue实现下拉懒加载
<template>
<div
class="ele-body infinite-wrapper"
style="height: calc(100vh - 235px); overflow: auto"
>
<div class="columns" v-loading="loading">
<div v-for="(item, index) in tabData" :key="index">
<span v-text="item"></span>
</div>
</div>
<infinite-loading
spinner="spiral"
@infinite="infiniteHandler"
:identifier="infiniteId"
:distance="200"
class="infinite-loading-wrap"
force-use-infinite-wrapper=".infinite-wrapper"
>
<div slot="spinner">正在加载...</div>
<div slot="no-more">没有更多啦</div>
<div slot="no-results">无结果数据</div>
<div slot="error"> 错误数据 </div>
</infinite-loading>
</div>
</template>
<script>
import InfiniteLoading from 'vue-infinite-loading';
export default {
components: { InfiniteLoading },
data() {
return {
tabData: [],
tablePage: {
total: 0,
currentPage: 1,
pageSize: 12
},
pagination: {
total: 0,
// 第几页
page: 1,
// 每页显示条数
limit: 12
},
}
},
methods: {
// 下拉加载
infiniteHandler($state) {
let params = {
projectId: this.id,
current: this.tablePage.currentPage,
pageSize: this.tablePage.pageSize
// startDate: this.startDate,
// endDate: this.endDate,
// ...this.where
};
this.loading = true;
queryMaterialTaskInfoList(params)
.then((list) => {
this.loading = false;
if (list.data.length) {
this.tablePage.currentPage += 1;
this.tabData = this.tabData.concat(list.data);
$state.loaded();
} else {
$state.complete();
}
})
.catch((e) => {
this.loading = false;
this.$message.error(e.message);
});
},
}
</script>
<style scoped>
.columns {
/* 设置或检索对象每列的宽度 */
/* column-width: 390px; */
column-width: 390px;
-moz-column-width: 390px; /* Firefox */
-webkit-column-width: 390px; /* Safari and Chrome */
/* 设置或检索对象的列与列之间的间隙 */
column-gap: 5px;
}
.columns div {
/* 避免在元素内部断行并产生新列 */
/* -webkit-column-break-inside: avoid; */
-webkit-column-break-inside: avoid;
}
/* 滚动下拉加载提示样式 */
.infinite-loading-container {
margin-top: 2px;
}
</style>
安装 npm install vue-infinite-loading --save
参考连接:https://www.dandelioncloud.cn/article/details/1566069813787455490

浙公网安备 33010602011771号