Uni-app返回上一页面并携带参数

这篇具有很好参考价值的文章主要介绍了Uni-app返回上一页面并携带参数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、前言

二、实现方法

三、遇到的坑

四、事件详解


一、前言

        需要实现这么一个需求:在一个列表页面,当子页面直接返回时,不刷新列表页面。但是当子页面的数据有变动时,需要刷新列表页面。本篇博客记录一下我是如何解决这个问题的。

        解决思路:在onShow()方法内监听返回数据,当是需要当前页面刷新时,在子页面设置一个标识符,当监听到这个标识符,就调用接口刷新数据。

        在使用过程中遇到了些小坑,小白建议看完全部的内容再选适合自己的方法解决,不要盲目copy代码。

二、实现方法

1、第一个页面 one.vue ,在onShow()方法内监听返回的参数,返回的参数在上一级页面定义的变量叫‘isRefresh’;

<template>
	<view>
		<navigator hover-class="none" url="/pages/two/two">跳到第二个页面</navigator>
	</view>
</template>
 
<script>
	export default {
		data() {
			return {
				
			}
		},
		onShow() {
			let that = this
			uni.$on('isRefresh',function(data){
				console.log('监听到事件来自返回的参数:' + data);
                // TODO 下面执行刷新的方法
			})
		},
		methods: {
			
		}
	}
</script>
 
<style>
 
</style>

2、第二个页面 two.vue,返回one.vue页面,要传递的参数是index:1

<template>
	<view>
		<button @click="goBack">点击返回上一页</button>
	</view>
</template>
 
<script>
	export default {
		data() {
			return {
				index:1,//返回上一页要穿的参数
			}
		},
		methods: {
			goBack() {
				uni.$emit('isRefresh', this.index)
				uni.navigateBack({
					delta: 1
				})
			}
		}
	}
</script>
 
<style>
 
</style>

三、遇到的坑

        当第一次返回列表页面时,没有问题。第二次返回时,会监听两次,第三次会监听三次,依次类推。查询uni.$emit相关资料后发现,这个是个全局的通讯事件。自 HBuilderX 2.0.0 起支持 uni.$emit、 uni.$on 、 uni.$once uni.$off ,可以方便的进行页面的通讯 ,触发的事件都是 App 全局级别的,跨任意组件,页面,nvue,vue 等。事件详情

        调用事件后要记得移除事件,或者直接使用 uni.$once 只调用一次,用完会自动移除事件。

四、事件详解

含义

1.uni.$emit(eventName,OBJECT):监听全局的自定义事件,事件由uni.emit 触发,回调函数会接收事件触发函数的传入参数。

其中eventName为事件名,OBJECT为触发事件附加参数
示例代码如下:

uni.$emit('update',{msg:'页面更新'})

2.uni.$on(eventName,callback)监听全局自定义事件,事件由uni.$emit()触发,回调函数会接收所有传入的数。
eventName为事件名,callback为事件的回调函数。
示例代码如下:

uni.$on('update',function(data){ 
	console.log('监听到事件来自 update ,携带参数 msg 为:'  + data.msg); 
})

3.uni.$once:监听全局的自定义事件,事件由uni.emit 触发,但仅触发一次,在第一次触发之后移除该监听器。不需要手动移除监听。

4.uni.$off移除全局自定义事件监听器。

因此,本次案例只需要使用 uni.$once 即可满足需求,将 uni.$on 改成 uni.$once 

<template>
	<view>
		<navigator hover-class="none" url="/pages/two/two">跳到第二个页面</navigator>
	</view>
</template>
 
<script>
	export default {
		data() {
			return {
				
			}
		},
		onShow() {
			let that = this
			uni.$once('isRefresh',function(data){
				console.log('监听到事件来自返回的参数:' + data);
                // TODO 下面执行刷新的方法
			})
		},
		methods: {
			
		}
	}
</script>
 
<style>
 
</style>

Tips

  • 如果uni.$off没有传入参数,则移除App级别的所有事件监听器;
  • 如果只提供了事件名(eventName),则移除该事件名对应的所有监听器;
  • 如果同时提供了事件与回调,则只移除这个事件回调的监听器;
  • 提供的回调必须跟$on的回调为同一个才能移除这个回调的监听器;

示例:

    <template>
        <view class="content">
            <view class="data">
                <text>{{val}}</text>
            </view>
            <button type="primary" @click="comunicationOff">结束监听</button>
        </view>
    </template>

    <script>
        export default {
            data() {
                return {
                    val: 0
                }
            },
            onLoad() {
                setInterval(()=>{
                    uni.$emit('add', {
                        data: 2
                    })
                },1000)
                uni.$on('add', this.add)
            },
            methods: {
                comunicationOff() {
                  	// 因传入了回调函数,只会移除本页面此回调函数的监听
                    uni.$off('add', this.add)
                },
                add(e) {
                    this.val += e.data
                }
            }
        }
    </script>

    <style>
        .content {
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
        }

        .data {
            text-align: center;
            line-height: 40px;
            margin-top: 40px;
        }

        button {
            width: 200px;
            margin: 20px 0;
        }
    </style>

搬砖不易,如果对你有帮助,帮忙点个小赞吧。。。文章来源地址https://www.toymoban.com/news/detail-476745.html

到了这里,关于Uni-app返回上一页面并携带参数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 干货,在uniapp项目中使用uni.navigateBack()方法返回上一页或多页时携带参数的方法!

    在微信官方文档中有这么一个方法:getCurrentPages() getCurrentPages()函数用于获取当前页面栈的实例,以 数组 形式按栈的顺序给出,第一个元素为首页,最后一个元素为当前页面。 注意: getCurrentPages()仅用于展示页面栈的情况,请勿修改页面栈,以免造成页面状态错误 在日常的实

    2024年02月12日
    浏览(49)
  • uni-app -移动端H5小程序 关闭当前页,返回上一页并调用上一页的方法

    👨‍💻 作者简介:程序员半夏 , 一名全栈程序员,擅长使用各种编程语言和框架,如JavaScript、React、Node.js、Java、Python、Django、MySQL等.专注于大前端与后端的硬核干货分享,同时是一个随缘更新的UP主. 你可以在各个平台找到我! 🏆 本文收录于专栏: uniapp踩坑指南 🔥 专栏介绍

    2024年02月05日
    浏览(48)
  • uniapp 返回上一步携带参数

    1. 下一步   (this.formList  是需要传给上一步的值) 2. 返回上一步, 携带参数

    2024年02月07日
    浏览(36)
  • uni-app返回上一个页面并进行页面刷新

    适用两个不同的页面跳转,返回上一个页面保存并刷新修改后的数据(也解决了uni-app的navigateBack返回不刷新的方法之一) 当前页: 上一页: 思路: 1、用getCurrentPages()获取打开的页面 2、保存当前页面和上一个页面 提示:不确定是不是从当前页跳转到上一页就console.log(pages[pa

    2024年02月12日
    浏览(49)
  • uni-app 如何返回到指定的页面

    实际开发中,发现了一个问题,即使签署合同的时候,发现调用法大大的页面,出现了一个问题,就是签署后,点回退,回退到了重新签署的页面。所以需要对回退进行自定义处理。 处理的话,就要到指定的返回页面。这里还存在不签署的情况,回退要是原来的页面。所以要

    2024年01月18日
    浏览(59)
  • uni-app - 移动端(iOS&Android)批量上传文件,支持重传、删除、多选,携带参数,进度监控

    👨‍💻 作者简介:程序员半夏 , 一名全栈程序员,擅长使用各种编程语言和框架,如JavaScript、React、Node.js、Java、Python、Django、MySQL等.专注于大前端与后端的硬核干货分享,同时是一个随缘更新的UP主. 你可以在各个平台找到我! 🏆 本文收录于专栏: uniapp踩坑指南 🔥 专栏介绍

    2024年02月03日
    浏览(45)
  • uni-app: onBackPress() 监听页面返回 - 更新数据

    生命周期 - onBackPress() 监听页面返回 函数名 说明 平台差异说明 onBackPress 监听页面返回 ,返回 event = {from:backbutton、 navigateBack} ,backbutton 表示来源是左上角返回按钮或 android 返回键;navigateBack表示来源是 uni.navigateBack ;详细说明及使用:onBackPress 详解。支付宝小程序只有真机

    2024年02月11日
    浏览(53)
  • uni-app微信小程序,在页面顶部添加返回按键,返回上一个页面

    1.示例: 2.实现方式: 在page.json文件中的style里添加如下代码: 3.tips: 在page.json中的页面顺序就是小程序加载过程中的页面顺序

    2024年02月12日
    浏览(45)
  • uni-app 实现navigateBack返回修改前一页面数据(H5、APP、小程序)

    先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前! 因此收集整理了一份《2024年最新Web前端全套学习资料》,

    2024年04月29日
    浏览(59)
  • uniapp、小程序选择数据后携带数据返回上一页且不刷新页面

    优先推荐方法三 图示: 从新建线索页面A跳转到选择线索页面B,然后选择相应线索之后再返回新建线索页面,且原来的表单数据不能丢失 方法一:使用uni.$emit  利用这个方法可以往uni这个对象身上添加自定义事件,然后通过uni.$on方法在生命周期onShow里面去触发事件,通过触

    2024年02月15日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包