我在 A 页面代码:
<script setup>
const toB= (url) => {
if (url) {
uni.$emit('dataChanged',{msg:'页面更新'})
uni.navigateTo({
url: `../h5/h5`,
complete: (e) => {
console.log("跳转 B 页: ", e)
}
})
} else {
// ...
}
}
</script>
B 页面代码:
<script setup>
import { onLoad } from "@dcloudio/uni-app"
// 页面生命周期
onLoad((e) => {
// console.log("【这里正常输出】:")
uni.$on("dataChanged", function (data) {
console.log("【这里不触发】:" + data)
})
})
</script>
4 个回复
最佳回复
DCloud_UNI_OttoJi - 日常回复 uni-app/x 问题,如果艾特我没看到,请主动私信
这里我补充了 demo 演示了 pages/index -> pages/about 页面跳转过程中发送信息的处理方案。https://gitcode.net/xiurensha5731/uni-app-questions/-/blob/q/api-emit/src/pages/index/index.vue 如有问题请开新帖艾特我沟通
banro
uni.$emit('dataChanged',{msg:'页面更新'}) 放在 complete 里试试
董路飞 (作者)
后面试过,又出现别的问题。
uni.$emit 放在 navigateTo 的 complete 里。第一次A跳B,在B页面也不触发,但是此时B页面返回A页面,再跳B页面就触发1次,再返回A页面跳B页面就触发2次,次数以此类推(我已经在生命周期函数onUnload 或 onHide里用 uni.$off移除监听了还是一样 )
2023-07-02 16:28
2***@qq.com
根据官方文档 https://uniapp.dcloud.net.cn/api/window/communication.html
底部最后一行说明:
故,要先定义$on才能再调用$emit!
对于要从A跳转到B页面,且需要从A传参到B页面的需求,文章 https://blog.csdn.net/a666666000/article/details/126749486 给出了2个解决方案。
解决办法(1):嵌套写法
解决办法(2):用定时器延迟$emit的使用
附解决办法(3):使用
uni.getStorageSync
昭昭L - 开心就好
用页面跳转的events,uni.emit你这种场景不适用