vant 组件二次封装上拉加载下拉刷新

<!--
 * 下拉刷新组件
 * 使用方法
    <yh-pull-refresh ref="pullRefresh" :postData="loadModel" @DataCallBack="DataCallBack">
		<template slot="content">
			<div class="row" v-for="(el,index) in list" :key="el.HomeWorkId"> </div>
		</template>
	</yh-pull-refresh>
    loadModel: {
		autoLoad: false,//是否自动加载
		getDataMethod: api_jxhd_HW_Evaluation_GetEvaluationHomeWorkInfoPageList, //获取分页数据的api方法
		params: {
			homeWorkStatus: 1, //作业发布状态 0未审核1已发布2未通过
			commentStatus: 0, //作业是否评价 0未评价1已评价
		}, //接口请求除分页外的其他参数
		page: 1,
		pagesize: 20,
    },
	DataCallBack(data) {
		this.list = data;
	},//组件列表返回数据
	getDataFun() {
		this.loadModel.params = this.params;
		if (this.$refs.pullRefresh) {
			this.$refs.pullRefresh.list = [];
			this.$refs.pullRefresh.getPostData()
		}
	},//主动去调用获取数据方法
-->
<template>
	<div class="van-pull-refresh">
		<van-pull-refresh v-model="refreshing" @refresh="onRefresh" success-text="刷新成功">
			<van-list v-model="loading" :finished="finished" @load="onLoad" finished-text="没有更多了">
				<slot name="content"></slot>
			</van-list>
		</van-pull-refresh>
	</div>
</template>
<script>
	export default {
		props: {
			postData: Object,
		},
		data() {
			return {
				list: [],
				refreshing: false, //下拉刷新
				loading: false, //上拉加载
				finished: false, //上拉加载完毕
				offset: 100, //滚动条与底部距离小于 offset 时触发load事件
				page: 1,
				pagesize: 10,
				getDataMethod: Object,
				autoLoad: true, //自动加载数据,默认开启
				params: {},
			};
		},
		created() {
			this.getPostData();
		},
		methods: {
			/* 获取初始值*/
			getPostData() {
				if (this.postData) {
					this.params = this.postData.params;
					this.page = this.postData.page;
					this.pagesize = this.postData.pagesize;
					this.getDataMethod = this.postData.getDataMethod;
					this.autoLoad = this.postData.autoLoad;
					this.finished = !this.autoLoad;
					this.onRefresh();
				}
			},
			// 下拉调用此函数
			onRefresh() {
				this.page = 1;
				this.finished = false;
				this.loading = true;
				this.onLoad();
			},
			onLoad() { // 上拉调用此函数
				if (this.refreshing) {
					this.list = [];
					this.refreshing = false;
				}
				let para = {
					page: this.page,
					pagesize: this.pagesize
				}
				para = Object.assign({}, para, this.params);
				this.getDataMethod(para).then((res) => {
					if (res && res.success == true) {
						if (res.response.data && res.response.data.length > 0) {
							this.page += 1;
							this.list = [...this.list, ...res.response.data];
							this.$emit("DataCallBack", this.list);
							if (this.page >= res.response.pageCount) {
								this.finished = true;
							}
						} else {
							this.finished = true;
							this.$emit("DataCallBack", this.list)
						}

					} else {
						this.list = [];
						this.$emit("DataCallBack", this.list)
						this.finished = true;
						this.$toast(res.msg)
					}
					this.loading = false;
				});
			},
		},
	};
</script>

<style lang="scss">
	.van-list {
		min-height: 1100px;
	}
</style>

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
vant是一个基于 Vue.js 的移动端组件库,它提供了一些非常方便的组件,包括下刷新和上。如果你想在你的项目中使用 vant 的下刷新和上功能,可以按照以下步骤进行: 1. 安装 vant 组件库 在项目中安装 vant 组件库,可以使用 npm 或者 yarn 进行安装。你可以在终端中执行以下命令进行安装: ``` npm install vant -S ``` 或者 ``` yarn add vant ``` 2. 引入 vant 组件 在你的 Vue 组件中引入 vant 组件,你需要在你的组件中添以下代码: ``` import { PullRefresh, List } from 'vant'; export default { components: { [PullRefresh.name]: PullRefresh, [List.name]: List }, data() { return { ... }; }, ... } ``` 在这里,我们引入了 vant 的`PullRefresh`和`List`组件。 3. 添刷新和上功能 在你的 Vue 组件中添以下代码,以启用下刷新和上功能: ``` <template> <div> <van-list v-model="list" :finished="finished" @load="onLoad" :offset="200" > <template #header> <van-pull-refresh v-model="refreshing" @refresh="onRefresh" /> </template> <template #item="{ item }"> <div class="item">{{ item }}</div> </template> </van-list> </div> </template> <script> export default { data() { return { list: [], refreshing: false, finished: false }; }, methods: { onRefresh() { setTimeout(() => { this.list = ['1', '2', '3', '4', '5']; this.refreshing = false; }, 1000); }, onLoad() { // 在这里添的逻辑 } } }; </script> ``` 在这里,我们使用了 vant 的`List`组件和`PullRefresh`组件。我们在`List`组件上添了`@load`事件,当滑动到底部时将会触发该事件。在`PullRefresh`组件上添了`@refresh`事件,当下刷新时将会触发该事件。 你需要在`onLoad`方法中添的逻辑。在该方法中,你可以通过异步操作从服务端获取更多的数据,并将其添到列表中。 以上就是使用 vant 实现下刷新和上的步骤。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值