A页面如何调用B页面的that.setData或者重载B页面?

发布于 8 年前作者 jie457275 次浏览最后编辑 8 年前来自 ask

A页面提交对后台数据库数据进行了更新。

B页面使用到相关数据。需要同步更新。

问题:

A页面完成提交后,如何触发B页面更新?

但我想知道除了onShow刷新B页面,是否还有其他方法?

A页面提交更新频率非常小,如果使用onShow,那么每次切换到B页面都得发送请求到后台请求获取数据

(基本每次都是获取一样的数据。本来是要onLoad获取一次就好了)。

这个感觉不合理啊。这种情况多了,那不是服务器压力山大!!!

9 回复
zhengming
zhengming1 楼6 年前

var that = this

var pages = getCurrentPages();//当前页面栈

if (pages.length > 1) {

    var beforePage = pages[pages.length - 2];//获取上一个页面实例对象

    //我的订单列表局部刷新

    if (beforePage.detailsRefreshPages) {

        console.log(that.data.index)

        beforePage.detailsRefreshPages(that.data.index, types);//触发父页面中的方法

    }

}

kdai
kdai2 楼6 年前

总结一下,有四个方案:

  1. 使用缓存setStorageSync

  2. 使用全局变量

  3. 使用view隐藏/显示。伪页面实现。

  4. 使用getCurrentPages()。

我考虑下看看用那种方便吧。

第一次发帖这么多人回帖。非常感谢大家!

lei71
lei713 楼6 年前

自己写一个简单的订阅,触发(观察者模式);在A页面订阅A事件;在B页面触发A事件就行;

我一般遇到这个事情都这么干;

clu
clu4 楼6 年前

如果A在B的后面可以用发布订阅的模式来做

wenqiang
wenqiang5 楼6 年前

getCurrentPages()

xiuying96
xiuying966 楼6 年前

AB页面放到一块不就结了

juanfang
juanfang7 楼6 年前

A页面提交的时候存个字段到缓存,B页面onshow根据缓存请求数据并改字段为false

mamin
mamin8 楼6 年前

放在全局变量里面,a提交完刷新全局变量就行了,B在全局变量里面拿值

junxu
junxu9 楼6 年前

不知道在A页面用页面栈能行不,我没试过

let page = getCurrentPages().reverse1()[1]
page.setData({
    xxx: xxxx
})

这个…reverse1改成reverse reverse加(会报错。。