dcloudio / dcloudio/uni-app

getOpenerEventChannel 在Vue3下, 同一个page页, 不同时机 获取到的不一致

Open
#4,235 0 comments 0 reactions 0 assignees View on GitHub
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
image
``` 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();
}
}
};

```
然后跳转第三页
image
``` 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();
}
}
}

```
回到 第二页后, 再点击 回到第一页
image

但是 第一页的
``` 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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.