uniapp 页面旋转后,返回上一页,页面变形的解决办法

进入横屏页面,返回上一页A的上一页B,再由B进入A,

### UniApp 表单提交后返回一页的实现方法 在 UniApp 中,可以通过多种方式实现在表单提交成功后返回一页面的功能。以下是几种常见的解决方案: #### 方法一:使用 `uni.navigateBack` 结合延时器 如果希望在表单提交完成后延迟一段时间再返回一页,可以结合 `setTimeout` 和 `uni.navigateBack` 来实现。 ```javascript // 假设这是表单提交成功的回调函数 this.$AlicloudApi.setDeviceProperty(params).then(res => { console.log(res.result); uni.showLoading({ title: '数据更新中' }); setTimeout(() => { uni.hideLoading(); uni.navigateBack(); // 返回一页 }, 1000); // 设置延时时间(单位毫秒) }); ``` 这种方法适用于简单的场景,不需要额外操作一页的状态[^4]。 --- #### 方法二:通过修改上一页面的数据 可以在当前页获取页面栈中的上一页面实例,并直接修改其数据或调用其方法。这种方式适合需要同步更新上一页面状态的情况。 ```javascript chooseAddress(item) { // item 是需要传递的地址对象数据 let pages = getCurrentPages(); // 获取页面栈的实例 let prePage = pages[pages.length - 2]; // 上一页面 // 修改上一页面的数据 prePage.$vm.address = item; // 或者调用上一页面的方法 // prePage.$vm.editAddress(item); uni.navigateBack(); // 返回一页 } ``` 该方法可以直接影响上一页面的状态,而无需依赖页面生命周期事件[^1]。 --- #### 方法三:利用 `onLoad` 和 `onShow` 刷新机制 由于 UniApp页面生命周期特性,当从子页面返回页面时,不会重新触发 `onLoad` 方法,而是会触发 `onShow` 方法。因此,可以在上一页面的 `onShow` 方法中刷新数据。 ```javascript // 上一页面 (假设为 A 页面) export default { data() { return { addressList: [] }; }, onShow() { this.getAddressList(); // 调用获取地址列表的方法 }, methods: { getAddressList() { // 这里执行获取最新数据的操作 } } }; ``` 这样即使不主动通知上一页面刷新,也可以通过监听 `onShow` 自动完成数据更新[^2]。 --- #### 方法四:强制重载上一页面 如果需要完全刷新上一页面,可以使用 `uni.redirectTo` 或 `uni.reLaunch` 替代 `uni.navigateBack`。需要注意的是,这会导致整个页面被销毁并重建。 ```javascript this.$AlicloudApi.setDeviceProperty(params).then(res => { console.log(res.result); uni.showLoading({ title: '数据更新中' }); setTimeout(() => { uni.hideLoading(); uni.reLaunch({ url: '/pages/previousPage/previousPage' // 替换为目标页面路径 }); }, 1000); }); ``` 此方法虽然简单粗暴,但在某些复杂场景下可能会影响用户体验[^4]。 --- #### 方法五:通过回调函数刷新上一页面 类似于方法二,但更加灵活。可以在返回之前显式调用上一页面的方法来刷新数据。 ```javascript let pages = getCurrentPages(); // 当前页面 let beforePage = pages[pages.length - 2]; // 上一页uni.navigateBack({ success: function () { beforePage.$vm.refreshData(); // 调用上一页面的 refreshData 方法 } }); // 上一页面需定义对应的 refreshData 方法 methods: { refreshData() { this.getDataFromServer(); // 更新数据逻辑 } } ``` 这种方法能够精确控制何时以及如何刷新上一页面的数据[^3]。 --- ### 总结 以上提供了五种不同的方案供开发者选择,具体采用哪种取决于实际需求: - 如果仅需返回而不涉及数据交互,则推荐 **方法一**; - 若需要实时更新上一页面数据,可选用 **方法二** 或 **方法五**; - 对于自动化的刷新需求,建议基于 **方法三** 完成; - 需要彻底刷新页面的情况下适用 **方法四**。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值