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

11 回复

应该是使用的组件名称冲突了 这里我先使用了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__数组中。

解决方案:

  1. 修改事件处理函数(推荐):
go(e) {
    const value = e.detail.__args__[0]; // 获取第一个参数
    console.log(value, "dds"); // 输出: 1 "dds"
}
  1. 使用解构赋值
go(e) {
    const [value] = e.detail.__args__;
    console.log(value, "dds");
}
回到顶部