使用uni.navigateBack修改上一个页面值,多页面传参通信解决方案

此类需求大概意思是:A页面进入B页面,B页面返回并传值给A。

var pages = getCurrentPages();
var currPage = pages[pages.length - 1]; //当前页面
var prevPage = pages[pages.length - 2]; //上一个页面

//直接调用上一个页面的setData()方法,把数据存到上一个页面中去
prevPage.setData({
mdata:1
})
uni.navigateBack(); //上一个页面数据无法修改

解决方案:onfire.js 是一个很简单的事件分发的Javascript库(仅仅 0.9kb),简洁实用。github地址:https://github.com/hustcc/onfire.js/blob/master/README_zh.md
可以用于:
1. 简单的事件分发;
2. 在 react / vue.js / angular 用于跨组件的轻量级实现;
3. 事件订阅和发布;
A页面:
onShow:function(){
var that = this;
onfire.on('setAddressInfo',function(addressInfo){
that.addressInfo = addressInfo;
})
},
B页面:
selectText: function(e){
var that = this;
var that_addressInfo ={
location: e.currentTarget.id
}
onfire.fire('setAddressInfo',that_addressInfo);
uni.navigateBack();
}

参考来源:https://juejin.im/post/5907f120b123db3ee48d2a4f


1 分享 关注
xiangdeshan_120@sina.com
774303486@qq.com

774303486@qq.com

我来填个坑


main.js中全局引入 onfire

import onfire from "./components/onfire/onfire"
Vue.prototype.$fire = new onfire()

监听页面A中监听事件

this.$fire.on('sss',()=>{
console.log("收到事件")
})


发送页面B中 发送事件

this.$fire.fire('sss','data');
0 赞 5 天前
774303486@qq.com

774303486@qq.com 回复 ljw.zw@foxmail.com

你这个就扯淡了。两个页面都引入onfire肯定监听不到,都不是同一个对象了。要在全局引入再new出对象。然后AB子页面调用方法
0 赞 5 天前
774303486@qq.com

774303486@qq.com

用起来感觉咋样?好用么,屌大的来讲一下
0 赞 5 天前
41612021@qq.com

41612021@qq.com

uni-app 页面间和组件间通信解决方案 https://hao-love.wang/2019/01/09/uniapp-ye-mian-jian-he-zu-jian-jian-tong-xin-jie-j/
0 赞 2019-01-09 15:19
DCloud_heavensoft

DCloud_heavensoft 回复 297008285@qq.com

http://ask.dcloud.net.cn/article/565
0 赞 2018-11-22 05:17
297008285@qq.com

297008285@qq.com 回复 ljw.zw@foxmail.com

好的,谢谢,还想问一下HBuilderX能WiFi调式吗?
0 赞 2018-11-20 19:53
ljw.zw@foxmail.com

ljw.zw@foxmail.com 回复 297008285@qq.com

两个页面中都引入 例:import onfire from '../../common/onfire.js';
A页面固定,提供属性值,例: addressInfo:{
location: '',
address: '点击选择地点',
name:''
},
打开B页面,获取数据赋到A页面提供的属性或方法中,例:var that_addressInfo ={
location: e.currentTarget.id,
address: e.currentTarget.dataset.address,
name:e.currentTarget.dataset.name,
formatted_address:that.formatted_address
}
onfire.fire('setAddressInfo',that_addressInfo);
0 赞 2018-11-20 17:05
297008285@qq.com

297008285@qq.com

提示说没有找到变量
0 赞 2018-11-20 16:17
297008285@qq.com

297008285@qq.com

您好,我想问一下,直接从GitHub 下载下来,把onfire文件直接放到项目中引入不行吗?我试了好久。没解决
0 赞 2018-11-20 16:14

要回复文章请先登录注册