vue兄弟组件传值$on多次执行的问题

本文介绍在Vue项目中如何正确使用Event Bus进行组件间通信,避免潜在的事件监听冲突。通过在父组件中先注销事件再接收的方式,确保组件通信的准确性和项目的稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 在父组件接收的时候,先把事件注销:Bus.$off("saveTheme"),然后再接收

  mounted(){
    Bus.$off("saveTheme")
    Bus.$on("saveTheme", (themeList) => {
      console.log(themeList,"子")
    })
  },

 

03-29
### uni.$on 方法使用说明 `uni.$on` 是 UniApp 提供的一种全局事件监听机制,主要用于跨页面或组件之间的通信。通过 `uni.$on` 可以监听由 `uni.$emit` 发送的事件,并在回调函数中处理接收到的数据。 #### 基本语法 ```javascript uni.$on(eventName, callback); ``` - **eventName**: 字符串类型,表示要监听的事件名称。 - **callback**: 函数类型,当指定事件被触发时执行的回调函数。该函数可以接收参数,这些参数是由 `uni.$emit` 发送过来的数据。 --- #### 示例代码 以下是完整的示例代码展示如何使用 `uni.$on` 进行跨页面: ##### 页面A (发送方) ```vue <template> <view> <button @click="sendMessage">发送消息</button> </view> </template> <script> export default { methods: { sendMessage() { const message = "你好,这是来自页面A的消息"; uni.$emit("customEvent", message); // 触发名为 customEvent 的事件并递数据 } } }; </script> ``` ##### 页面B (接收方) ```vue <template> <view> <text>等待接收消息...</text> </view> </template> <script> export default { onLoad() { uni.$on("customEvent", this.handleMessage); // 监听名为 customEvent 的事件 }, beforeDestroy() { uni.$off("customEvent", this.handleMessage); // 移除事件监听以防内存泄漏 }, methods: { handleMessage(data) { console.log("接收到的消息:", data); // 输出接收到的数据 } } }; </script> ``` --- #### 注意事项 1. **生命周期管理** 如果不在适当的时候移除事件监听器 (`uni.$off`),可能会导致内存泄漏或其他不可预期的行为[^3]。 2. **事件名唯一性** 确保使用的事件名称在整个应用范围内具有唯一性,以免与其他模块的事件冲突[^5]。 3. **异步特性** `uni.$on` 和 `uni.$emit` 并不保证同步执行,因此需要合理设计业务逻辑来应对可能的时间差问题[^4]。 --- #### 扩展功能 除了基本的单次监听外,还可以实现多次监听或者动态绑定多个事件处理器。例如: ```javascript // 动态绑定多个事件处理器 const handler1 = (data) => console.log("Handler1 received:", data); const handler2 = (data) => console.log("Handler2 received:", data); uni.$on("multiEvent", handler1); uni.$on("multiEvent", handler2); // 后续可以通过 uni.$emit('multiEvent', someData) 来触发这两个处理器 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值