getOpenerEventChannel 在Vue3下, 同一个page页, 不同时机 获取到的不一致
- Dominant language
- JavaScript
- Stars
- 41.6k
- Forks
- 3.7k
- Avg merge
- 7h 6m
- Merged PRs (30d)
- 6
Description
**问题描述**
[问题描述:尽可能简洁清晰地把问题描述清楚]
现在有 页面A, B, C
每个页面 都 通过 `getOpenerEventChannel` 来传递 和 接收 数据, 但是 同一页面 不同时机 获取 `getOpenerEventChannel()` 获取到的对象不一致
**复现步骤**
[或者可以直接贴源代码]
**页面1**
``` html
第一
点击
import _ from "lodash";
export default {
data() {
return {
mm: ["第一"]
};
},
methods: {
gogo() {
let copy = _.cloneDeep(this.mm);
uni.navigateTo({
url: "/pages/second/second",
events: {
goBack1(data: any) {
console.log("diyi 拿到数据", data);
}
},
success(res) {
console.log("第一 发送数据 -- ", copy);
res.eventChannel.emit('__toSecond', copy);
}
})
},
},
};
```
跳转到 页面2
``` html
second
跳转第三
返回第一页
import _ from 'lodash';
let mmm: any = null;
export default {
data() {
return {
mm2: [] as any[]
};
},
onLoad() {
const eventChannel = this.getOpenerEventChannel();
mmm = eventChannel;
eventChannel.once('__toSecond', (data: any) => {
console.log('第二 收到 数据', data);
this.mm2 = [...data, '第二'];
});
},
methods: {
goThird() {
let that = this;
let copy = _.cloneDeep(this.mm2);
uni.navigateTo({
url: '/pages/third/third',
events: {
backTo2(data: any) {
console.log('第二 收到数据', data);
that.mm2 = data;
}
},
success(res) {
console.log('第二 发送数据 -- ', copy);
res.eventChannel.emit('__toThird', copy);
}
});
},
goBack1() {
let copy = _.cloneDeep(this.mm2);
const eventChannel = this.getOpenerEventChannel();
eventChannel.emit('goBack1', copy);
uni.navigateBack();
}
}
};
```
然后跳转第三页
``` html
third
返回 第二页面
import _ from "lodash"
export default {
data() {
return {
mm3: [] as any[]
}
},
onLoad() {
const eventChannel = this.getOpenerEventChannel();
eventChannel.once('__toThird', (data: any)=> {
console.log("第三 收到 数据", data);
this.mm3 = [...data, "第三"];
});
},
methods: {
goBackTo2() {
let copy = _.cloneDeep(this.mm3);
const eventChannel = this.getOpenerEventChannel();
eventChannel.emit('backTo2', copy);
uni.navigateBack();
}
}
}
```
回到 第二页后, 再点击 回到第一页

但是 第一页的
``` js
events: {
goBack1(data: any) {
console.log("diyi 拿到数据", data);
}
},
```
并没有响应
**预期结果**
[使用简洁清晰的语言描述你希望生效的预期结果]
不管页面 如何跳转, `emit`之后 都应该 有响应
**系统信息:**
- 发行平台: h5
- 操作系统 macos
- HBuilderX版本 3.7.9.20230324
- uni-app版本 HBX 自带的 版本
- 设备信息 : 最新 chrome
**补充信息**
相同代码 在Vue2 下 没有问题
可能是因为 在 `onload` 中 获取的 `getOpenerEventChannel()`和后来 获取的 `getOpenerEventChannel()`不是同一个对象
Contributor guide
Assessment
This issue has not been assessed yet.