用微信小程序的时候,很多人可能都遇到过这种情况:手一滑,不小心点了返回,结果页面直接关了,之前填的表单、做的操作全没了。尤其在填写订单或编辑内容时,这种误操作挺让人头疼的。这时候,加一个退出确认对话框就很有必要了。
为什么需要退出确认?
用户在使用小程序时,可能正在输入信息或者进行关键操作。如果直接退出,数据丢失容易引发抱怨。通过弹出确认框,可以让用户再确认一次是否真的要离开,提升体验。
小程序里怎么实现这个功能?
微信小程序提供了 onShow 和 onHide 生命周期,但真正能拦截退出行为的是 onUnload 和页面栈控制。不过,微信并没有开放直接阻止退出的 API,所以得换个思路——在用户点击返回时主动弹窗确认。
可以在页面的 onBackPress 中处理返回逻辑。这个生命周期钩子在用户点击导航栏返回或手机物理返回键时触发。
onBackPress() {
// 判断是否有未保存的数据
if (this.data.hasUnsavedData) {
wx.showModal({
title: '提示',
content: '您有未保存的内容,确定要退出吗?',
success: (res) => {
if (res.confirm) {
// 用户确认退出,让页面继续关闭
wx.navigateBack();
} else if (res.cancel) {
// 用户取消,不执行任何操作,停留在当前页
// 注意:这里不能阻止默认行为,所以需要手动控制
}
}
});
// 返回 true 表示已处理返回事件,框架不再执行默认行为
return true;
}
// 没有未保存数据,允许直接返回
return false;
}
注意事项
这个方法的关键在于 onBackPress 返回值。返回 true 表示你已经处理了返回动作,微信就不会自动执行返回了。这样就能配合 showModal 实现“拦一下”的效果。
但要注意,onBackPress 只在非首页页面有效。如果当前是第一个页面,用户退出小程序时不会触发这个函数,而是直接关闭。
实际场景举例
比如你在做一个问卷类小程序,用户填到第三题时想返回上一页。这时候如果直接退,答案就丢了。加上确认弹窗后,系统会问一句“内容尚未提交,确定要退出吗?”,用户点“取消”就能继续填写,避免误操作。
类似的场景还有购物车修改、评论编辑、表单提交前等。只要涉及用户输入,都可以考虑加上这层保护。
优化体验的小技巧
弹窗文案要简洁明确,别写“是否确认退出?”这种机械语言,换成“内容没保存,确定离开?”更贴近真实使用场景。按钮文字也可以把“确定”改成“离开”,“取消”改成“继续编辑”,让用户更清楚每个选择的后果。