目录
需求背景 :
列表页面,由于数据量过多时 在 IE 浏览器上面会加载异常缓慢,刚进入时页面空白无数据,导致用户体验感较差,所以需要整改优化。
这里就需要 前后端 联调 调整 了,
后端:需将接口由原来的传给前端的全部数据方式调整为 “分页传输” 方式,也就是前端再多传给后端两个字段值:currentPage:1,// 当前页数;pageSize:10,// 一页显示的条数( 当然这里我们是由后端写死了:5,一页固定传给前端 5 条数据,所以前端此字段可以不传 )
前端:进行 懒加载 处理,也就是 需借助 Element|InfiniteScroll 无限滚动 组件 来实现一个下拉至列表底部时,向后端请求下一页的数据用于拼接至列表数组后再次展示新的内容。【 PC 端 】
接下来就让我们来 了解 & 如何使用 吧:( 可参考 组件的 禁用加载 示例 )
前端:懒加载,移动端 需借助 Vant 2 |List 列表 组件 |基础用法 来实现一个下拉至列表底部时,向后端请求下一页的数据用于拼接至列表数组。
PC 端 :
InfiniteScroll 无限滚动
滚动至底部时,加载更多数据。
在前端开发中,很多页面都需要实现无限滚动的效果,即当页面滚动到底部时,自动加载更多的数据。Element Infinitescroll 是一款方便易用的 Vue 组件,可以帮助我们快速实现无限滚动功能。
基本用法
Element Infinitescroll 提供了一个 v-infinite-scroll 指令,可以直接在需要无限滚动的元素上使用。
<template>
<div>
<DefaultReport
v-if="dataList.length > 0"
:dataList.sync="dataList"
:loading.sync="loading"
:noMore="noMore"
@getDataList="getDataList"
/>
</div>
</template>
<script>
import DefaultReport from './component/DefaultReport';
import { getStData } from '@api/listApi.js';
export default {
components: { DefaultReport },
data() {
return {
loading: false, // 列表加载中...
noMore: false, // 没有更多了
dataList: [], // 页面数据
setFormData: {
surveyId: '',
currentPage: 1, // 当前页数
},
};
},
computed: {
rqObj() {
return this.$route.query || {};
},
},
created() {
if (this.rqObj.id && this.rqObj.id !== null) {
this.setFormData.surveyId = this.rqObj.id;
this.getDataList(this.setFormData);
}
},
methods: {
async getDataList(data) {
let res = await getStData(data);
const { code, result } = res;
if (code === '0') {
if (result.lists && result.lists.length > 0) {
this.dataList = this.dataList.concat(result.lists);
}
this.loading = false;
// 加载完成后需要将loading设置为false,以便下次触发加载
} else {
// 没有更多数据了(需停止继续加载)
this.loading = false;
this.noMore = false;
}
},
},
};
</script>
<style lang="scss" scoped></style>
<t