可以用的 用回原版(亲测可用 就是写多了就麻烦)
通过B页面修改A页面值
//我的页面监听事件。 A页
onLoad(){ //页面加载事件
// 监听事件
uni.$on('login',(ddaatt)=>{
this.AAA= ddaatt.AAA; //ddaatt.BBB
})
},
onUnload() { //监听页面卸载
// 移除监听事件
uni.$off('login');
},
触发事件 B页( B页触发A页)
在其他方法里写这个就ok了
uni.$emit('login', {
AAA: 'unier',
BBB: 'unier1123'
});
这个写法 淘汰了 由于官方去除了setData 的写法 后面的就没意义了 可以看下
先说下我要实现的功能 : 我是想关闭当前页面,返回上页面,且修改上一页面data里的值。(这个app和小程序通用)
上代码:(我也是刚接触到uni-app 代码可能不够好,请见谅 )
解释 ------> A是 上一页 B是 下一页
B页要写的
在 methods: { 。。。 } 下写下面的代码
click_qd:function(){//一个点击事件
var pages=getCurrentPages(), prevPage=null;
if(pages.length>1){
prevPage=pages[pages.length-2];
}
if(prevPage){
console.log(JSON.stringify(prevPage.data));//输出上一页的结构 app 和 小程序 不一样
prevPage.data.inpp='213212312';//错误写法 也不算错 能改 但是不是 data数据
//正确写法 要和上一页的(A) onshow 配合使用
prevPage.setData({ hope_job:"test" })
}
uni.navigateBack();
}
A页要写的
在 export default {。。。} 下写
onShow:function(e){
let pages = getCurrentPages();
let currPage = pages[pages.length-1];
if (currPage.data.hope_job==""){
this.getHopeJob();
}else{
this.hope_job = currPage.data.hope_job
this.inpp = currPage.data.hope_job //这个this.inpp 可预先在data() {return { inpp:"" 里面定义
console.log(this.inpp )
}
}
页面的同步 下面的调用不同步(通this.xxxx 是获取不了的 只是之前的值 原因是异步 上面的不会出现这情况 )
注意: 除了在index实现的 ‘底部导航栏‘ 例外 (因为onshow onload 默认参数失效)
解释 ------> A是 上一页 B是 下一页
B
click_qd:function(){
var pages=getCurrentPages(), prevPage=null;
if(pages.length>1){
prevPage=pages[pages.length-2];
}
if(prevPage){
// console.log(JSON.stringify(prevPage.data));
if(this.address_dz !=null && this.address_dz !=""){
prevPage.setData({
address_end:this.address_dz
})
}
}
uni.navigateBack();
}
A
export default {
data() {
return {
address_end:"花园"
}
}
}
还有通过全局变量也能达到效果
注意:全局变量 有持久的 和 XXX(不会表达 生效时间就是当前程序运行到结束 第二次运行软件 会以默认数据为准 )
这个自己可以搜下 如 uni 全局变量