# uni.$on(eventName, callback)

监听自定义事件。事件可以由 uni.$emit 触发。回调函数会接收 uni.$emit 传递的参数。 4.31+ 开始支持返回事件监听器 id, 用于 off 事件监听器。

# $on 兼容性

Web Android iOS iOS uni-app x UTS 插件
4.0 3.91 4.11 4.31

# 参数

名称 类型 必填 默认值 兼容性 描述
eventName string - - 事件名称
callback () => void - - 事件回调

# 返回值

类型
number

# 参见

# uni.$off(eventName, callback)

移除自定义事件监听器。如果提供了事件名和回调,则只移除这个回调的监听器。 4.13+ 开始支持第二个参数为可选,如果仅提供事件名,则移除该事件的所有监听器。 4.31+ 开始第二个参数的类型由 Function | null 调整为 any | null, 支持传入 uni.$onuni.$once 返回的事件监听器 id, 移除指定事件监听器。

# $off 兼容性

Web Android iOS iOS uni-app x UTS 插件
4.0 3.91 4.11 4.31

# 参数

名称 类型 必填 默认值 兼容性 描述
eventName string - - 事件名称
callback any - - 要移除的事件回调或事件监听器 id

# 参见

# uni.$once(eventName, callback)

监听一个自定义事件。事件只触发一次,在第一次触发之后移除事件监听器。 4.31+ 开始支持返回事件监听器 id, 用于 off 事件监听器。

# $once 兼容性

Web Android iOS iOS uni-app x UTS 插件
4.0 3.91 4.11 4.31

# 参数

名称 类型 必填 默认值 兼容性 描述
eventName string - - 事件名称
callback () => void - - 事件回调

# 返回值

类型
number

# 参见

# uni.$emit(eventName, args?)

触发自定义事件,附加的参数会传递给事件监听器。

# $emit 兼容性

Web Android iOS iOS uni-app x UTS 插件
4.0 3.91 4.11 4.31

# 参数

名称 类型 必填 默认值 兼容性 描述
eventName string - - 事件名称
args Array<any> - - 触发事件时传递的参数

WARNING

参数 args 为对象字面量时,4.25 前需要通过 as 明确类型,例如:

uni.$emit('fn', {"a": 1} as UTSJSONObject)

4.25+ 编译器会自动将对象字面量推断为 UTSJSONObject 类型,不再需要通过 as 明确类型。如果需要传递其他自定义类型的对象字面量,仍需要通过 as 明确类型。

# 参见

# 示例

hello uni-app x

扫码体验(手机浏览器跳转到App直达页)

Template

Script

<template>
  <!-- #ifdef APP -->
  <scroll-view class="page-scroll-view">
    <!-- #endif -->
    <view class="box">
      <button class="uni-btn" @click="on">开始监听</button>
      <button class="uni-btn" @click="once">监听一次</button>
      <button class="uni-btn" @click="off">取消监听</button>
      <!-- <button @click="offAll">取消全部监听</button> -->
      <button class="uni-btn" @click="emit">触发监听</button>
      <button class="uni-btn" @click="clear">清空消息</button>
      <view>
        <view class="uni-btn">收到的消息:</view>
        <view class="uni-btn">
          <view v-for="(item, index) in log" :key="index">{{ item }}</view>
        </view>
        <button class="uni-btn" @click="onObj">开始监听 obj 参数</button>
        <button class="uni-btn" @click="emitWithObj">触发监听 obj 参数</button>
        <view class='uni-btn'>
          <text>接收到的 obj 参数:</text>
          <text>{{ JSON.stringify(objArg) }}</text>
        </view>
        <button class='uni-btn' @click="testReturnId">测试返回 id</button>
        <button class='uni-btn' @click="testEmitNoArgs">测试 $emit 无参</button>
        <button class='uni-btn' @click="testEmitMultipleArgs">测试 $emit 多个参数</button>
      </view>
    </view>
    <!-- #ifdef APP -->
  </scroll-view>
  <!-- #endif -->
</template>



<style>
.box {
  padding: 10px;
}
</style>

# 通用类型

# GeneralCallbackResult

名称 类型 必备 默认值 兼容性 描述
errMsg string - - 错误信息

# Tips

    • eventName 应避免使用 uni 开头,以免与 uni-app x 内置事件冲突