发布于 

Uniapp开发微信小程序的坑

起因是我们公司最近在做一个新的小程序。

这个小程序,是由外协的同事负责开发的,他们使用的是 Uniapp 框架,而非原生的微信小程序开发框架。

其中有部分功能,可以沿用我们之前的小程序代码。于是就将这部分代码拷贝了出来,给了外协的同事。

我们之前的小程序,是使用原生的微信小程序开发框架,而他们使用的是 Uniapp 开发框架,这样一来,代码肯定会有些差异。

不过倒也还好,差异不是很大,一开始,他们接入的也挺顺利。

但是后面有个功能一直不行,然后发现是下面这一段代码的问题。

1
2
3
4
5
6
//获取所有页面
const pages = getCurrentPages()
//获取当前页的上一个页面
const pre = pages[pages.length - 2]
//调用上一个页面的reloadPage方法
pre.reloadPage()

一直报 reloadPage 不是一个方法,也就是说这个方法不存在。

当时看不出啥问题,只能一点一点对比代码,还是没发现什么不对。上一个页面中,也确实是存在 reloadPage 这个方法的。

我也没用过 Uniapp 开发小程序,但是看他们的代码,好像确实没什么问题。

一晚上都没解决。

第二天来上班时,我突然灵光一闪,难道 Uniapp 不能像原生框架一样,直接调用某个小程序页面的方法?

我就去网上搜了一下 Uniapp 框架开发小程序时,如何调用别的页面的方法。结果一搜,发现还真的不一样!

这才是 Uniapp 中正确的写法!

1
2
3
4
5
6
//获取所有页面
const pages = getCurrentPages()
//获取当前页的上一个页面
const pre = pages[pages.length - 2]
//调用上一个页面的reloadPage方法
pre.$ref.reloadPage()

前两步都是一样的,但是调用页面方法的时候,原生框架是直接 页面.方法,而 Uniapp 则是 页面.$ref.方法

坑啊!

后面让外协的同事修改了一下代码,果然可以了。