!这种方法首先要理解uniapp里面的getCurrentPages()函数,自己可以打印一下就知道了 var pages = getCurrentPages();//获取所有页面的数组对象 var currPage = pages[pages.length - 1]; //当前页面 var beforePage= pages[pages.length - 2]; //上一个页面
原理
从A页面进入B页面以后,在B页面选择数据以后,通过getCurrentPages()函数得到上一个页面的实例对象,然后直接修改他的数据,在通过uni.navigateBack()函数直接返回,这里用了一个技巧就是通过uni.navigateBack()函数返回页面,不会对上一个页面进行刷新,这样就可以实现回显
例子
A页面现在有一个数据
data() { return { id: '' } },
B页面选择完数据以后
var pages = getCurrentPages() var prevPage = pages[pages.length - 2] prevPage.$vm.id = '自己要更改的数据值' uni.navigateBack({ delta: 1 })
到这里已经可以实现回显了,但是!!!有坑,同时这个坑出现的概率非常小,但是会遇到,就是在B页面更改完A页面数据,返回A页面以后,A页面数据变了,但是A页面对应的数据丢失了响应式 ,会出现,数据更改了,但是页面要渲染的数据没发生改变
解决方法(一个大佬告诉我的)
就是通过动态渲染key值的方法,因为key值改变相当于对应的页面元素从新渲染,来解决这种偶然遇到的问题(因为时间戳是唯一的所以用这个)
当页面每次进入的时候直接页面生命周期onshow自动调用 让对应key值变量发生改变,来从新渲染页面,这样就可以解决这个大坑
扩展知识