uniapp通过自定义事件进行页面通讯

应用场景:页面A跳转页面B,在页面B操作完成将结果返回页面A,返回是通过uni.navigateBack()方式返回,这个时候页面A是不会自动刷新页面的,但是页面B要将结果返回到页面A,在这种情景下就需要用到全局自定义事件来进行页面通讯。

具体看代码实现:

首先页面A创建一个自定义的监听事件 refreshPage,通过回调函数参数来接收页面B返回的结果。

onLoad((options)=>{

	uni.$on("refreshPage",(arg)=>{
		getAddressData(arg);
	})

})

页面B:我这里的业务是这样的。下面是一个用户的地址列表,用户选择完地址之后自动返回页面A,并将用户选择的地址信息在页面A中展示出来。

<radio-group @change="radioChange">

	<view class="row"   v-for="item in addressList" :key="item.id">
		<view class="row-1"><radio :value="item.id" :checked="index === current"  /></view>
		<view class="row-2">
			<view class="row-title">{{item.username}} {{item.phone}}</view>
			<view class="row-address">{{item.province}}{{item.city}}{{item.area}}{{item.detail}}</view>
		</view>

		<view class="row-3">
			<image src="../../static/icons/edit.png" class="imgicon" />
			<!-- <image src="../../static/logo.png" class="imgicon" style="margin-left:20rpx" /> -->
		</view>
	</view>

</radio-group>


const radioChange = (e)=>{

	console.log(e)
	let id = e.detail.value;
	uni.navigateBack({
		success: () => {
			uni.$emit('refreshPage', {"addressid":id})
		}
	})

}

通过uni.$emit 创建一个自定义事件 refreshPage ,同时传递参数。

最后在页面A退出的时候需要将全局的自定义事件refreshPage移除,需要在页面A中添加onUnload()事件。

onUnload(()=>{
    uni.off("refreshPage")
})

这样就可以实现页面之间的通讯。这是组合式API的写法。

------------------ 华丽分割线 ------------------
欢迎大家阅读我的创业笔记,如果你觉得这篇写得不错的话,可以关注我的公众号: 成长创业笔记 第一时间查阅我们的文章!感谢大家的支持。
我是一名独立开发者,创业者。欢迎大家跟我交流软件开发、软件运营的一切事情。 包括网站建设、小程序开发、安卓app开发等。
微信号:zstxinghui
欢迎大家使用我们的软件:
  • ● 在线图片编辑器
  • ● 小程序: 家政小程序,陪诊小程序
  • ● 开源的网站内容管理系统: 小木CMS内容管理系统
更欢迎大家下载我们的APP:
  • ● 松鼠天气:简洁的天气预报,日历工具
公众号
程序员小张
我们的主营业务:承接网站建设小程序开发安卓APP开发软著申请等。欢迎咨询!
扫一扫,加我微信
随机文章
独立开发者的困局
2024-06-09 14:09:26
成长创业周记15:开发自己软件产品继续兼职跑外卖
2024-12-08 00:18:40
php判断访问的设备是移动端还是电脑端
2025-01-14 15:44:57
axios在vue3项目中的使用
2025-01-27 14:17:14
从失业到一腔热血的开始创业再到一地鸡毛
2025-04-01 20:03:14