A页面如何调用B页面的that.setData或者重载B页面?
发布于 7 年前 作者 jie45 7122 次浏览 来自 问答

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

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

问题:

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

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

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

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

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

9 回复

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);//触发父页面中的方法

    }

}

总结一下,有四个方案:

  1. 使用缓存setStorageSync

  2. 使用全局变量

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

  4. 使用getCurrentPages()。

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

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

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

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

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

getCurrentPages()

AB页面放到一块不就结了

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

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

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

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

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

回到顶部