uniapp:通知上一页刷新,有这么几个方式;常用于详情返回列表

在使用uniapp开发的过程中,我相信,我们都一定遇见过如下的场景:

进入了一个列表页,列表页进入详情页,在详情页进行了一些操作,比如,删除,修改,编辑,提交,成功之后返回到列表页,那么这个时候,如果我们的列表页不进行数据的刷新,就会给用户一种错觉,我刚才进行操作的那条数据会不会没成功,我们下拉刷新下列表,这个数据就变成最新的了,这个是很常见的一个交互场景,那么如何不让用户进行下拉刷新或者重新进入列表页的操作,我提供几种比较常用的做法!

onShow:简单粗暴,但是却有缺陷

使用onShow可能是最简单的写法 ,我们只需要将请求的方法,放在onShow里面执行即可,onShow是这么的一个生命周期:

 

 用法超级简单,但是却有着比较大的缺陷,例如:我点进了详情,但是我什么都不做,而后返回列表页,这个时候,依然进行了一个getList方法的执行,重新进行了请求,合理吗?很显然不合理!怎么办?

页面通讯:uni.$emit, uni.$on

这个可能是我用的最多的方式,页面简介 | uni-app官网

用法其实也比较简单,在列表页中的onLoad周期中进行事件的监听,在详情页面中进行emit事件的发射,如下:

list列表页

需要注意的一点是,需要在页面卸载的周期内,把自定义的事件off掉

<template>
	<view>
		<view class="good" v-for="item in 10" :key="item" @click="nav">{{ item }}</view>
	</view>
</template>

<script>
export default {
	onLoad() {
		this.getList();
		uni.$on('handleSuccess', data => {
			console.log('details发出的值===>', data);
			if (data) {
				this.getList();
			}
		});
	},
	onUnload() {
		uni.$off('handleSuccess');
	},
	methods: {
		async getList() {
			// .....进行一下列表请求吧
		},
		nav() {
			uni.navigateTo({
				url: '/pages/details/details'
			});
		}
	}
};
</script>

<style lang="scss" scoped>
.good {
	height: 100rpx;
	background-color: #18b566;
	margin-bottom: 30rpx;
}
</style>

details详情页面

<template>
	<view><u-button type="primary" @click="submit">提交</u-button></view>
</template>

<script>
export default {
	methods: {
		submit() {
			uni.$emit('handleSuccess', true);
		}
	}
};
</script>

页面展示:

 如此就可!

uni.navigateTo():events的使用 

可能啊,我们大多数都只是使用这个路由api进行页面跳转,向下个页面传递个参数之类的,其实如果认证观看文档,会发现这个路由api有妙用;uni.navigateTo(OBJECT) | uni-app官网 

 list:列表页

<template>
	<view>
		<view class="good" v-for="item in 10" :key="item" @click="nav">{{ item }}</view>
	</view>
</template>

<script>
export default {
	onLoad() {
		this.getList();
	},
	methods: {
		async getList() {
			// .....进行一下列表请求吧
		},
		nav() {
			uni.navigateTo({
				url: '/pages/details/details',
				events: {
					handleSuccess: data => {
						console.log('details发出的值===>', data);
						if (data) this.getList();
					}
				}
			});
		}
	}
};
</script>

<style lang="scss" scoped>
.good {
	height: 100rpx;
	background-color: #18b566;
	margin-bottom: 30rpx;
}
</style>

details:详情页

<template>
	<view><u-button type="primary" @click="submit">提交</u-button></view>
</template>

<script>
export default {
	methods: {
		submit() {
			const eventChannel = this.getOpenerEventChannel();
			console.log(eventChannel);
			eventChannel.emit('handleSuccess', true);
		}
	}
};
</script>

 通过打印details中的eventChannel发现它长这个样子

 如此使用便可!

题外话:我们还可以传递给下个页面更多的参数

列表页在success函数中发出了一个事件sendForm

uni.navigateTo({
	url: '/pages/details/details',
	events: {
		handleSuccess: data => {
			   console.log('details发出的值===>', data);
				if (data) this.getList();
			}
		},
	success: res => {
		res.eventChannel.emit('sendForm', { data: '111222' });
	}
});

详情页,拿到这个sendForm事件传递出的数据

	onLoad() {
		const eventChannel = this.getOpenerEventChannel();
		eventChannel.on('sendForm', data => {
			console.log(data);
		});
	},

如此,基本上就是如何使上一页刷新的几个方法,赶紧选一种用吧!

  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jay丶萧邦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值