my.navigateback(object object)
支小宝客户端 支持
安诊儿客户端 支持
主体: 企业支付宝小程序 、 个人支付宝小程序
相关文档: 路由使用须知
关闭当前页面,返回上一级或多级页面。
可通过 getcurrentpages() 获取当前的页面栈信息,决定需要返回几层。
使用此 api 前,建议先阅读 路由使用须知。
object object
查看示例
属性 | 类型 | 默认值 | 必填 | 描述 |
---|---|---|---|---|
delta | number | 1 | 否 | 回退的页面数。如果 delta 大于等于打开的页面栈深度,则返回到栈底页面 |
success | function | - | 否 | 调用成功的回调函数 |
fail | function | - | 否 | 调用失败的回调函数 |
complete | function | - | 否 | 调用结束的回调函数(调用成功、失败都会执行) |
fail 回调的参数为 object,error
属性为错误码,errormessage
属性为错误消息。
错误码 | 错误消息 | 凯发app官方网站的解决方案 |
---|---|---|
'"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;
},
});
q:能否使用 my.navigateback 退出小程序?
my.navigateback 不能退出小程序,在最后一个页面调用会触发 fail 回调。退出小程序请使用 my.exitminiprogram(请注意该 api 的调用要由用户主动触发才能成功)。