my.navigateBack(Object object)
主体: 企业支付宝小程序 、 个人支付宝小程序
相关文档: 路由使用须知
简介
my.navigateBack 关闭当前页面,返回上一级或多级页面。
可通过 getCurrentPages() 获取当前的页面栈信息,决定需要返回几层。
使用此 API 前,建议先阅读 路由使用须知 。
入参
Object object
属性 | 类型 | 默认值 | 必填 | 描述 |
---|---|---|---|---|
delta | Number | 1 | 否 | 回退的页面数。如果 delta 大于等于打开的页面栈深度,则返回到栈底页面。 |
success | Function | - | 否 | 调用成功的回调函数。 |
fail | Function | - | 否 | 调用失败的回调函数。 |
complete | Function | - | 否 | 调用结束的回调函数(调用成功、失败都会执行)。 |
错误码
fail 回调的参数为 Object,
error
属性为错误码,
errorMessage
属性为错误消息。
错误码 | 错误消息 | 解决方案 |
---|---|---|
"already top of navigation" | 当前页面栈的深度为 1,无法再回退 | 避免在最后一个页面上调用。可使用 getCurrentPages() 获取当前页面栈深度,提前判断。 |
代码示例
Page({
navigateBack() {
my.navigateBack(); // 返回上一页
navigateBackDelta() {
my.navigateBack({
delta: 2
}); // 返回上一页的上一页
});
常见问题
Q:使用 my.navigateBack 返回,如何通知所到达的页面刷新?是否可以通过监听返回按钮点击或页面返回事件达到这一目的?
使用 my.navigateBack 返回所到达的页面并不会自动刷新。当前页面可以通过
onBack
监听到导航栏上返回按钮(以及 Android 系统返回键)被点击,但不支持监听左滑手势、API 调用等其他方式导致的返回。但无论哪种返回方式,当前页面关闭前都会触发
onUnload
,返回到达的页面均会触发
onShow
,故可利用这个机制进行必要的处理。注意 onShow 事情并不一定是通过返回触发,需要自行判断。一种实现方式如下:
// 当前页面
Page({
onSomeButtonTap() {
// 在全局数据中存信息,带时间戳
getApp().globalData.navigateBackPayload = this._navigateBackPayload = {
time: Date.now(),
message: 'by my.navigateBack',
// 调用接口返回
my.navigateBack();
onUnload() {
if (!this._navigateBackPayload) {
// 其他方式离开页面,也存一条
getApp().globalData.navigateBackPayload = {
time: Date.now(),
message: 'by other means',
// 返回的目标页面
Page({
onShow(options) {
// 从全局数据中取信息
const { globalData } = getApp();
const { time, message } = globalData.navigateBackPayload || {};
// 比较时间戳,推测是否为有效数据。1000ms 只是个粗糙的经验值,可调整
if (time && Date.now() - time < 1000) {
console.log('do something with message: ' + message);
// 清除信息,避免重复处理
globalData.navigateBackPayload = null;