【UniApp】-uni-app-传递数据

前言

  • 好,经过上个章节的介绍完毕之后,了解了一下 uni-app-路由
  • 那么了解完了uni-app-路由之后,这篇文章来给大家介绍一下 uni-app-路由传递数据

路由传参怎么传,是不是可以从 A 页面传递给 B 页面,然后 B 页面再传递给 C 页面, 也可以从 C 页面传递给 B 页面,然后 B 页面再传递给 A 页面(可以顺着传也可以逆着传递)。

注意点:我这里没有使用新建项目,而是使用的是上一篇文章的项目,所以大家可以直接在上一篇文章的项目上进行修改。

步入正题

通过组件跳转传递数据(包含API)

  • 传递

更改 navigate 跳转的路由在后面加上 ? 号,然后在后面加上参数,参数的格式是 key=value,多个参数之间用 & 连接。

<navigator url="/pages/one/one?name=BNTang&age=18" open-type="navigate">
    <button type="default">navigate</button>
</navigator>

这样改写了之后,我们在跳转到 one 页面的时候,就会把 name 和 age 两个参数传递过去。

  • 接收

在 one 页面中,可以在 onLoad 生命周期中进行接收,他会在 onLoad 生命周期中接收到一个参数 options,这个 options 就是我们传递过来的参数,我们可以通过 options.name 和 options.age 来获取到我们传递过来的参数。

<script>
	export default {
		onLoad(option) {
			console.log(option)
		}
	}
</script>

如上的通过组件的方式,我们快速的来过一边通过 API 的方式来传递数据, 代码如下:

<template>
	<view>
        省略...
      
		<button @click="onJumpOne">navigateTo</button>
	</view>
</template>
<script>
	export default {
		methods: {
			onJumpOne() {
				uni.navigateTo({
					url: '/pages/one/one?name=LeaderTang&age=18'
				})
			}
		}
	}
</script>

这种方式传递数据是最简单的,除了这种方式,还有其他的方式来传递数据,下面我们来看一下其他的方式。

通过事件通道传递数据(API路由跳转)

打开 UniApp 官方文档:https://uniapp.dcloud.net.cn/api/router.html#navigateto

在 navigateTo 中,有介绍到一个 success 回调函数,这个回调函数是在跳转成功之后执行的,我们可以在这个回调函数中进行传递数据。

<template>
	<view>
      省略...

      <button @click="onJumpOne">navigateTo</button>
	</view>
</template>
<script>
	export default {
		methods: {
			onJumpOne() {
				uni.navigateTo({
					url: '/pages/one/one',
					success: function(res) {
						// 通过eventChannel向被打开页面传送数据
						res.eventChannel.emit('acceptDataFromOpenerPage', {
							data: '通过事件通道传递的数据'
						})
					}
				})
			}
		}
	}
</script>

如上代码在 success 回调函数中,我们通过 res.eventChannel.emit 方法来传递数据,这个方法接收两个参数,第一个参数是一个字符串,这个字符串是我们在接收数据的页面中定义的(两边要一致,自己定义),第二个参数是一个对象,这个对象就是我们要传递的数据。

然后我们在 one 页面中接收数据,代码如下:

<template>
	<view>
		<text>one</text>
	</view>
</template>
<script>
	export default {
		onLoad(option) {
			const eventChannel = this.getOpenerEventChannel();
			eventChannel.on('acceptDataFromOpenerPage', function(data) {
				console.log(data)
			})
		}
	}
</script>

如上代码,我们在 onLoad 生命周期中通过 this.getOpenerEventChannel() 方法来获取到事件通道,然后通过 eventChannel.on 方法来接收数据,这个方法接收两个参数,第一个参数是我们在跳转页面中定义的字符串,第二个参数是一个回调函数,这个回调函数中的参数就是我们传递过来的数据。

看了这么多都是从上一个页面传递到下一个页面,那么我们怎么从下一个页面传递到上一个页面呢?这正是我接下来要介绍的内容。

返回上一个页面传递数据

打开 UniApp 官方文档:https://uniapp.dcloud.net.cn/api/router.html#navigateback

返回上一个页面,我们可以通过 navigateBack 方法来实现,这个方法接收一个参数 delta,这个参数是一个数字,表示返回的页面数,如果 delta 是 1,表示返回上一个页面,如果 delta 是 2,表示返回上两个页面,以此类推(堆栈结构)。

我们先来搭建页面,放一个按钮,点击按钮返回上一个页面。

<template>
	<view>
		<text>one</text>
		<text>=======================</text>
		<button type="default" @click="onGoBackClick">返回上一个界面</button>
	</view>
</template>
<script>
	export default {
		methods: {
			onGoBackClick() {
				uni.navigateBack({
					delta: 1
				});
			}
		}
	}
</script>

如上代码,我们在点击按钮的时候,调用 navigateBack 方法,传递一个 delta 参数,这个参数是 1,表示返回上一个页面。

那么怎么在返回上一个页面的时候,传递数据呢?我们可以在 onGoBackClick 方法中获取事件通道,然后通过 eventChannel.emit 方法来传递数据,代码如下:

const eventChannel = this.getOpenerEventChannel();
eventChannel.emit("acceptDataFromOpenerPage", {
    data: '通过事件通道返回时传递数据'
})

如上代码,我们在点击按钮的时候,获取事件通道,然后通过 emit 方法来传递数据,这个方法接收两个参数,第一个参数是一个字符串,这个字符串是我们在接收数据的页面中定义的(两边要一致,自己定义),第二个参数是一个对象,这个对象就是我们要传递的数据。

返回时我们传递了数据,那么我们怎么接收数据呢?我们可以在上一个页面中的跳转 API 对象中通过 events 参数, 在 events 定义一个回调函数,这个回调函数的名字必须与返回页面中 emit 方法中的第一个参数一致,然后在这个回调函数中接收数据,代码如下:

events: {
    acceptDataFromOpenerPage(data) {
        console.log(data)
    }
}

  • 测试结果

这种通过事件通道的方式比较通用,不管是从上一个页面传递到下一个页面,还是从下一个页面传递到上一个页面,都可以通过这种方式来传递数据。

最后

大家好我是 BNTang, 一个热爱分享的技术的开发者,如果大家觉得我的文章对你有帮助的话,可以关注我的公众号 JavaBoyL,我会在公众号中分享一些IT技术和一些个人的见解,谢谢大家的支持。

posted @   BNTang  阅读(344)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
  1. 1 总会有人离开 王巨星
  2. 2 月亮 孟凡明
  3. 3 迟里乌布
  4. 4 我只能离开 颜人中
  5. 5 达尔文 蔡健雅
  6. 6 夜色滚烫 叶明净
  7. 7 你的星环 路飞文
  8. 8 不再说话 三块木头
  9. 9 黄昏 粥粥和小伙/粥粥
  10. 10 爱不单行 刘大拿
  11. 11 心动贩卖机 PIggy
  12. 12 别来无恙 苏星婕
  13. 13 我们的歌 刘大拿
  14. 14 一直很安静 王贰浪
  15. 15 去有风的地方 清音
  16. 16 雪 Distance Capper/罗言
  17. 17 坏女孩 徐良/小凌
  18. 18 乐园 沧桑Cang333/虎皮蛋/曲甲
  19. 19 Ayo(Explicit) Chris Brown/Tyga
  20. 20 我的美丽feat.海洋Bo 海洋Bo/高睿
  21. 21 世事可爱 粥粥和小伙/粥粥
  22. 22 我记得 赵雷
  23. 23 我想牵着你的手 许嵩
  24. 24 人们都不懂 刘诺然
  25. 25 寻一个你(电视剧《苍兰诀》温情主题曲) TTTTTeehom
  26. 26 子莫格尼 杉和
  27. 27 Cat Cafe Shoffy
  28. 28 风停了雨停了我们还拥抱着 Superluckyqi
  29. 29 寂寞沙洲冷 于潼
  30. 30 三国恋 王巨星
  31. 31 达尔文 林俊杰
  32. 32 有些 颜人中
  33. 33 小模样 张小只ya
  34. 34 是否 程响
  35. 35 楼顶上的小斑鸠 队长
  36. 36 笑场 薛之谦
  37. 37 还是分开 张叶蕾
  38. 38 修炼爱情 林俊杰
  39. 39 二零三 毛不易
  40. 40 雅俗共赏 许嵩
  41. 41 Serendipity 古瑞斯Graps/Zakiya晴子
  42. 42 就让这大雨全都落下·2023 刘大拿
  43. 43 老男孩 筷子兄弟
  44. 44 有何不可 许嵩
  45. 45 缓缓 杜宣达
  46. 46 好久不见 陈奕迅
  47. 47 爱的魔法(Cover 金莎) 封茗囧菌
  48. 48 在你的身边 盛哲
  49. 49 带我去找夜生活 告五人
  50. 50 假面舞会 很美味
  51. 51 STAY The Kid LAROI/Justin Bieber
  52. 52 我好想睡觉的 无敌西红柿
  53. 53 日不落(温柔版)
  54. 54 恋爱画板 锦零
  55. 55 7710 好乐无荒/尹露浠
  56. 56 给你呀(又名:for ya) 蒋小呢
  57. 57 Love Story Taylor Swift
  58. 58 Plain Jane(Remix 13z) 鱼幼微
  59. 59 晚风 7opy/BT07
  60. 60 拜托 孙晨
  61. 61 乌梅子酱 李荣浩
  62. 62 南半球与北海道 范倪Liu
  63. 63 星河万里 Rom邢锐
假面舞会 - 很美味
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 苏恪@九号/临渡

作曲 : Willyam Wiay

出品:网易子弹 X 网易云上

(本歌曲已获原版权公司正规授权)

Are you ready to dance?

Hey yah hey ~

Let’s go party!

别理睬时钟 明天再看吧

微醺般的晚风

轻轻地拨动

吟游者的吉他

没有人担忧与害怕

在他的假面下

抬头海上烟花 绽放一刹那

你的眼眸比火花 还要亮啊

来吧 快点来吧

人类多爱扮作傻瓜

亲爱的你呀 再跳个舞吧

向月亮出发 反正别停下

谁都别说话 让脚步踢踏

趁天还没亮 尽情做梦吧

Oh 还有 一百个童话 还有 (Oh~)

关于我们的以后 还有

热烈的镜头还不够

冰冷的眼泪不够

欢笑和沉默不够 (Woo~)

放肆拥抱的自由

袒露在假面的背后 (Eh~)

没有告别

那个月亮是 我送你的吻

没有天亮

你会永远是 我的星辰

不必惊讶

梦哪有什么 所谓真假

不必回答

跳着一个接一个的舞吧

亲爱的你呀 再跳个舞吧

向月亮出发 反正别停下

谁都别说话 让脚步踢踏

趁天还没亮 尽情做梦吧

亲爱的你呀 再跳个舞吧

向月亮出发 反正别停下

谁都别说话 让脚步踢踏

趁天还没亮 尽情做梦吧

亲爱的你呀 再跳个舞吧

向月亮出发 反正别停下

谁都别说话 让脚步踢踏

趁天还没亮 尽情做梦吧

La~

一起跳舞吧

反正你别停下

趁天还没亮 一起做梦吧

本歌曲来自网易〖探乐者行动〗

监制:如风/黄俊

企划:柯棵/张小鹿/王政典

全案统筹:张小鹿

制作人:赫拉Hera/吴姝霆

版权统筹:魏媛

艺人统筹:敬一/黎婧/宋欣雨

音乐统筹:桑玉泓

宣发:破晓工作室

编曲:ZRZ

混音:GhettoKid_OG

和声:阿拉蕾/很美味

录音师:赫拉Hera

录音棚:2203录音棚

封面设计:黄诗惠

投稿邮箱:the9@service.netease.com

点击右上角即可分享
微信分享提示