uni-app中this.$emit小程序返回值出错
uni-app中this.$emit小程序返回值出错
| 项目信息 | 详细信息 |
|---|---|
| 产品分类 | uniapp/小程序/微信 |
| PC开发环境操作系统 | Windows |
| PC开发环境操作系统版本号 | win11 |
| HBuilderX类型 | 正式 |
| HBuilderX版本号 | 3.3.5 |
| 第三方开发者工具版本号 | 1.05.2111300 |
| 基础库版本号 | 2.21.2 |
| 项目创建方式 | HBuilderX |
操作步骤:
组件内
```javascript
this.$emit("go", 1)
父级
[@go](/user/go)="go"
go(e) {
console.log(e, "dds")
}
预期结果:
打印
1 'dds'
实际结果:
打印
{type: "go", timeStamp: 373392, target: {…}, currentTarget: {…}, mark: {…},…}changedTouches: undefinedcurrentTarget: {id: "", dataset: {…}}detail: {__args__: Array(1)}__args__: Array(1)0: 1length: 1nv_length: (...)__proto__: Array(0)__proto__: Objectmark: {}mp: {type: "go", timeStamp: 373392, target: {…}, currentTarget: {…}, mark: {…},…}mut: falsepreventDefault: ƒ noop()stopPropagation: ƒ noop()target: {id: "", dataset: {…}, __args__: Array(1)}timeStamp: 373392touches: undefinedtype: "go"_requireActive: undefined__proto__: Object "dds"
bug描述:
HbuilderX 3.3.5.20211229版本,组件内使用this.$emit("go", 1),编译到小程序,在父组件获取返回值和以前不一样了(图一),编译到h5正常(图2),HbuilderX 3.2.9 编译到小程序也正常。


更多关于uni-app中this.$emit小程序返回值出错的实战教程也可以访问 https://www.itying.com/category-93-b0.html
应该是使用的组件名称冲突了 这里我先使用了NavigationBar作为组件的名称
使用emit传参的时候就有问题
印出这个
后面把使用的组件名称改成sfnavigation-bar这个
打印就没问题了
更多关于uni-app中this.$emit小程序返回值出错的实战教程也可以访问 https://www.itying.com/category-93-b0.html
24年3.13团队有个同学反馈,遇到同样问题,我是各种降uniapp版本,node版本还是复现。 偶尔看到答主这答案。改组件名解决,应该是哪个组件名可能和uview组件或者第三库同名了。 谢谢答主!!!
同样碰到类似问题,修改组件名,问题已解决
请提供简单可复现的完整示例(上传附件),方便我们快速排查问题哦。
【bug优先处理规则】https://ask.dcloud.net.cn/article/38139
麻烦 大佬们看看
你好 请问解决了没
我也遇见同样问题 子组件传父组件 传不过去


同样遇到了这个问题,父组件中获取到的值像是方法本身的事件对象,而非 $emit() 的传值
有什么解决方法吗
参考1楼答主,组件重名会导致这个问题,可以尝试换个名称。 这个重名可能是和第三方库重名!!2024.3.13遇到同样问题,重名导致的。
在uni-app中,this.$emit在小程序端的返回值结构在HBuilderX 3.3.5版本发生了变化。这是框架底层实现调整导致的,并非bug。
原因分析:
小程序原生事件机制中,事件对象包含detail字段用于传递自定义数据。uni-app为保持多端一致性,在事件对象中统一封装了参数。在3.3.5版本中,小程序端的事件对象结构被标准化,$emit传递的参数现在被放在e.detail.__args__数组中。
解决方案:
- 修改事件处理函数(推荐):
go(e) {
const value = e.detail.__args__[0]; // 获取第一个参数
console.log(value, "dds"); // 输出: 1 "dds"
}
- 使用解构赋值:
go(e) {
const [value] = e.detail.__args__;
console.log(value, "dds");
}

