m***@qq.com
m***@qq.com
  • 发布:2019-01-17 13:50
  • 更新:2020-12-08 18:50
  • 阅读:29220

UNI-APP返回刷新的问题

分类:uni-app

A页面navigateTo到B页面,带参数
B页面在onload方法中获取A页面传递过来的参数,并根据获取来的参数从服务端拉数据,并展示,同时,B页面使用navigateTo到C页面并传递参数
C页面在onload方法中获取B页面传递过来的参数,C页面是一个表单,提交B页面传递过来的参数及表单元素到服务端,使用navigateBack方法返回B页面或者A页面,这时如何自动刷新B页面或者A页面??????

另外navigateBack如何带参数返回??B页面或者A页中又如何获取这些参数???

2019-01-17 13:50 负责人:无 分享
已邀请:
m***@qq.com

m***@qq.com (作者) - IT

用一种方法实现了
在B页面设定一个页面状态isFromC = false;
在onShow方法中判断isFromC 是true还是false,如果是true,就将数据清空,重新从服务端拉数据
去C页面的时候将isFromC = true;

不知道这种方法算不算好方法,迷茫...
但是无法实现直接返回A页面的时候刷新A页面

其实,这种WebApp大多数时候返回都是要刷新的,建议官方给navigateBack接口增加一个参数,返回是否刷新,内置到API内部去

8***@qq.com

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

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

m***@qq.com (作者) - IT

其实就是发布文章返回刷新的问题

m***@qq.com

m***@qq.com (作者) - IT

如果采用redirectTo能够保证刷新,但是由于没有加入页面栈,点返回按钮的时候依然会有旧的页面显示,体验感就很不好了

m***@qq.com

m***@qq.com (作者) - IT

我的思路是在OnShow方法中判断是否从C页面返回的,如果是,就重新从服务端拉数据,否则就显示原页面,但是,不会写....有没有人给个代码提示啊??

sunwork888

sunwork888 - 素工科男

确实

a***@shuliangfu.com

a***@shuliangfu.com - Shu Liangfu

我只知道用onfire.js可以实现

井

let pages = getCurrentPages()  
for (let i = pages.length - 1; i > -1; i--) {  
    let page = pages[i]  
    if (page.route == 'pages/address/addresses') {  
        page.onLoad({  
            ...page.options,  
            refresh: 1  
        })  
        uni.navigateBack({  
            delta: pages.length - i - 1,  
        })  
        break  
    }  
}
诸葛逍遥

诸葛逍遥

这个问题好些人遇到 官方应该考虑添加参数问题了

  • 6***@qq.com

    最烂的官方,问题不断,还从不回复

    2019-09-21 14:51

hellocat

hellocat

用vuex不就可以了

初学者123

初学者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

o***@126.com

用onShow不香吗

1***@qq.com

1***@qq.com

用文档中的页面通讯方法也许可以实现 页面通讯

该问题目前已经被锁定, 无法添加新回复