场景
- 我们在项目中会遇到从A页面跳转到B页面的操作
- 从A页面跳转B页面时需要携带一些B页面需要使用的参数
- 在B页面进行一些操作后需要返回到A页面,但是A页面又需要对从B页面返回回来后的行为进行一些操作,比如刷新数据之类的
A页面
这个没什么好说的,一般就是使用uni.navigateTo函数,但是由于我们需要对从B页面返回回来后的行为进行一些操作,所以我们需要多设置一些配置,如下
uni.navigateTo({
url: `/page_user/orderDetail?id=${orderId}`,
events: {
goback(data) {
console.log(data);
},
},
});
可以看到,uni.navigateTo函数除了常用的url参数外,还使用了一个events参数,这个参数中的函数名就是B页面向A页面发送返回后需要进行什么操作的通信标识
uni.navigateTo函数除了可以在url参数中传入数据,也可以使用另一种方法传递数据,这样的好处是跳转的路由不会很长,并且由于url有长度限制,所以如果要传入
B页面
B页面首先需要在onLoad生命周期中接受A页面传入的参数
import { onLoad } from '@dcloudio/uni-app';
onLoad((res)=>{})
B页面使用uni.navigateBack函数返回上一页,但是我们由于需要通知A页面做一下操作,所以还需要一些额外操作,如下
import { getCurrentInstance } from 'vue';
const { proxy } = getCurrentInstance();
const eventChannel = proxy.getOpenerEventChannel();
eventChannel.emit('goback', { backData: '你好,我是从B页面返回A页面时给A页面的数据' });
await new Promise((resolve) => setTimeout(resolve, 1500));
uni.navigateBack();
可以看出第四行代码就是B页面通知A页面的关健所在了,emit中第一个参数就是与A页面的通信标识,第二个参数是需要返回给A页面的数据
注意: 这个是vue3的写法,第一和第二行都是为了获取到当前页面的this,所以如果是vue2的话,可以省略第一和第二行的代码,并将第三行的proxy改为this即可