uniapp 获取所有页面的数据对象 getCurrentPages的使用

 1.刷新当前也或上一页

var pages = getCurrentPages(); //获取所有页面的数组对象
var currPage = pages[pages.length - 1]; //当前页面
uni.reLaunch({
                url: currPage.$page.fullPath
            })

var beforePage= pages[pages.length - 2]; //上一个页面

 使用navigateBack 返回并刷新上一页

var pages = getCurrentPages();
var currPage = pages[pages.length -2];
uni.navigateBack({
	delta:1,
	success: () => {
	currPage.$vm.getAddressList();
	}
})

 返回上一页并刷新getAddressList方法(自己定义的)

const getAddressList=()=>{}

 2.跳转回显

从A页面进入B页面以后,在B页面选择数据以后,通过getCurrentPages()函数得到上一个页面的实例对象,然后直接修改他的数据,在通过uni.navigateBack()函数直接返回,这里用了一个技巧就是通过uni.navigateBack()函数返回页面,不会对上一个页面进行刷新,这样就可以实现回显。

例子

A页面数据

let gender=ref("");
// 获取上一页返回的数据
let pages = getCurrentPages();
gender.value=pages[0].data.gender

B页面返回上一页并传递数据给gender

var pages = getCurrentPages()
var prevPage = pages[pages.length - 2]
prevPage.setData({
    gender:"要修改的数据",
})
uni.navigateBack({
	delta: 1
})

到这里已经可以实现回显了,但是!!!有坑,同时这个坑出现的概率非常小,但是会遇到,就是在B页面更改完A页面数据,返回A页面以后,A页面数据变了,但是A页面对应的数据丢失了响应式 ,会出现,数据更改了,但是页面要渲染的数据没发生改变。

解决办法

<view :key ='idKey'>
</view>

<script setup>
    let idkey=ref(0);
onShow(()=>{
    idkey = new Date().getTime()
})
</script>

当页面每次进入的时候直接页面生命周期onshow自动调用 让对应key值变量发生改变,来从新渲染页面,这样就可以解决这个大坑

扩展知识

2. 用 +new Date() 生成的时间戳作用Key ,收到强制触发重新渲染

<Comp :key="+new Date()"/>

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值