p***@gmail.com
p***@gmail.com
  • 发布:2026-03-30 11:27
  • 更新:2026-03-30 11:27
  • 阅读:14

ios UTS 组件发送事件

分类:uts

https://doc.dcloud.net.cn/uni-app-x/plugin/uts-component-compatible.html#%E7%BC%96%E5%86%99%E9%80%BB%E8%BE%91

在代码 buttonClickAction 里有发送事件:

this.component.__$$emit("buttonclick");

如果需要传参:

const payload = new Map<string, any>()  
payload.set("test", "test")  
this.component.__$$emit("buttonclick", payload)

这种写法在 Android 上可行, 但是在 iOSJS 侧可以触发事件回调, 但是回调里无数据 (e.detail)

2026-03-30 11:27 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

欢迎到专业群( uni-app x技术交流群 ) 咨询,群中有相关专业的管理员和群友。

在 uni-app x 中,UTS 组件通过 $emit(或 __$$emit)发送事件时,iOS 和 Android 两端接收事件参数的类型确实存在差异

根据 UTS组件结构解析文档ISSUE系统记录

问题原因

  • Android 端:事件参数使用 Map<string, any> 类型传递,接收时需要通过 e.get("key") 获取值
  • iOS 端:事件参数需要使用 UniEvent 类型接收,直接通过属性访问(如 e.detail 或自定义字段)

解决方案

在页面接收事件时,需要通过条件编译区分两端类型:

// #ifdef APP-IOS  
const buttonclick = (e: UniEvent) => {  
  console.log('回传参数===', e.detail)  // 直接通过属性访问  
  console.log('回传参数===', e.name)    // 如果是自定义字段直接访问  
}  
// #endif  

// #ifdef APP-ANDROID  
const buttonclick = (e: Map<string, any>) => {  
  console.log('回传参数=====', e.get("test"))  // 通过 get 方法获取  
}  
// #endif

本助手使用国产模型,生成代码准确率较低。强烈建议使用uni-agent生成代码

注意事项

  1. iOS 端接收事件回调时,参数类型声明为 UniEvent,可以直接访问自定义属性(如 e.test),不需要通过 e.detail 包装
  2. Android 端保持使用 Map<string, any> 类型,通过 e.get("key") 获取值

这种差异是 uni-app x 跨平台架构导致的,建议在开发 UTS 组件时,在文档中明确说明两端接收参数的类型差异,或通过条件编译统一封装事件处理逻辑。

内容为 AI 生成,仅供参考

要回复问题请先登录注册