A页面navigateTo到B页面,带参数
B页面在onload方法中获取A页面传递过来的参数,并根据获取来的参数从服务端拉数据,并展示,同时,B页面使用navigateTo到C页面并传递参数
C页面在onload方法中获取B页面传递过来的参数,C页面是一个表单,提交B页面传递过来的参数及表单元素到服务端,使用navigateBack方法返回B页面或者A页面,这时如何自动刷新B页面或者A页面??????
另外navigateBack如何带参数返回??B页面或者A页中又如何获取这些参数???
14 个回复
m***@qq.com (作者) - IT
用一种方法实现了
在B页面设定一个页面状态isFromC = false;
在onShow方法中判断isFromC 是true还是false,如果是true,就将数据清空,重新从服务端拉数据
去C页面的时候将isFromC = true;
不知道这种方法算不算好方法,迷茫...
但是无法实现直接返回A页面的时候刷新A页面
其实,这种WebApp大多数时候返回都是要刷新的,建议官方给navigateBack接口增加一个参数,返回是否刷新,内置到API内部去
8***@qq.com
经验证,用下的方式可行:
var pages = getCurrentPages();
var currPage = pages[pages.length - 1]; //当前页面
var prevPage = pages[pages.length - 2]; //上一个页面
//直接调用上一个页面的setData()方法,把数据存到上一个页面中去
prevPage.setData({
isDoRefresh:true
})
uni.navigateBack();
===========================
onShow:function(e){
let pages = getCurrentPages();
let currPage = pages[pages.length-1];
if (currPage.data.isDoRefresh == true){
currPage.data.isDoRefresh = false;
this.doRefresh();
}else{
//不用刷新
}
}
5***@qq.com
可以具体表明一下分别在哪个页面吗 谢谢
2019-05-21 21:34
8***@qq.com
回复 5***@qq.com:
这一段在调用返回的方法中写:
var pages = getCurrentPages();
var currPage = pages[pages.length - 1]; //当前页面
var prevPage = pages[pages.length - 2]; //上一个页面
//直接调用上一个页面的setData()方法,把数据存到上一个页面中去
prevPage.setData({
isDoRefresh:true
})
uni.navigateBack();
---------------------这是分割线---------------------------------
这一段在你所返回的目标页面里,重写onShow方法:
onShow:function(e){
let pages = getCurrentPages();
let currPage = pages[pages.length-1];
if (currPage.data.isDoRefresh == true){
currPage.data.isDoRefresh = false;
this.doRefresh();
}else{
//不用刷新
}
}
2019-05-26 21:58
5***@qq.com
回复 8***@qq.com: 谢谢
2019-05-28 16:22
5***@qq.com
this.doRefresh();z这个是什么啊?
2019-05-28 16:28
8***@qq.com
回复 5***@qq.com: 这是由自己写的刷新页面数据的方法,你换成你自己页面刷新的方法就好了
2019-05-29 23:05
1***@qq.com
回复 8***@qq.com: 求一下帮助呢,因为是组件 所有没有onshow的生命周期,放在mounted里没生效...
2019-08-27 14:19
5***@qq.com
回复 8***@qq.com: 测试了,返回上一页面onShow可以获取更新数据
2019-10-18 10:51
9***@qq.com
亲测可用
2019-10-29 10:26
7***@qq.com
回复 8***@qq.com: 不行 提示currPage.data.isDoRefresh undefinded
2020-07-16 11:59
7***@qq.com
回复 7***@qq.com: 用onBackPress() 也报错 ,醉了
2020-07-16 12:01
店小二丶
请问一下 vue3 页面 似乎$vm上面没有变量 和 方法 如何操作呢
2023-04-04 10:09
8***@qq.com
我也这个问题,数据不刷新,而且是tabbar
8***@qq.com
试试我上面的那种方法,tabbar也应该可以的,你可以把var pages = getCurrentPages();的pages打印出来看一下
2019-05-29 23:08
8***@qq.com
回复 8***@qq.com:谢谢 我试一下
2019-05-30 09:31
m***@qq.com (作者) - IT
其实就是发布文章返回刷新的问题
m***@qq.com (作者) - IT
如果采用redirectTo能够保证刷新,但是由于没有加入页面栈,点返回按钮的时候依然会有旧的页面显示,体验感就很不好了
m***@qq.com (作者) - IT
我的思路是在OnShow方法中判断是否从C页面返回的,如果是,就重新从服务端拉数据,否则就显示原页面,但是,不会写....有没有人给个代码提示啊??
6***@qq.com
onshow不能带参数
2019-08-26 18:19
sunwork888 - 素工科男
确实
a***@shuliangfu.com - Shu Liangfu
我只知道用onfire.js可以实现
井
诸葛逍遥
这个问题好些人遇到 官方应该考虑添加参数问题了
6***@qq.com
最烂的官方,问题不断,还从不回复
2019-09-21 14:51
hellocat
用vuex不就可以了
初学者123 - 80后IT男
我今天也遇到了这个问题。搜索后,发现大多数解决方法都比较复杂。其实,有简单的,我测试已经成功了。
在生命周期中,onshow是每次进入页面,都会出现的。例如,我们看B页面,那从A进入到B,onshow会发生一次;从C返回到B,onshow也会发生一次。所以,很简单的作法,是把需要刷新的数据函数或方法,放在onshow中,这样就会产生局部刷新的效果。
我的使用场景,是看到未读消息,进入到下一级页面,返回后希望未读消息消失。通过这种方法,可以完美实现。我检查过网络状态,这样的局部刷新,一般在100毫秒左右,性能非常好。
n***@163.com
onshow 方法不能传参
2020-08-24 17:07
初学者123
回复 n***@163.com: onShow本不是传参,是及时刷新。传参还是通过页面跳转来实现
2020-08-25 15:17
o***@126.com
用onShow不香吗
1***@qq.com
用文档中的页面通讯方法也许可以实现 页面通讯
新为向前
会造成多次调用函数
2021-02-01 14:55