$bus和$emit
时间: 2023-08-20 13:14:50 浏览: 106
$bus和$emit是Vue中用于组件间通信的机制。
$bus是一个自定义的事件总线对象,可以用来传递非父子关系的数据。通常与$emit、$on、$off连用。可以在任意组件间进行通信。
$emit用于在组件中触发一个自定义事件,并传递数据给其他组件。例如,在发送值的组件中使用this.$bus.$emit('eventName', data)来触发一个自定义事件,并传递数据data给其他组件。
$on用于在组件中监听一个自定义事件,并定义回调函数来处理接收到的数据。例如,在接收值的组件中使用this.$bus.$on('eventName', callback)来监听一个自定义事件,并在回调函数中处理接收到的数据。
$off用于解绑组件中绑定的自定义事件。通常在组件销毁前使用$off解绑当前组件所用到的事件。例如,在beforeDestroy钩子中使用this.$bus.$off('eventName')来解绑当前组件所绑定的自定义事件。
通过以上的使用方式,可以实现组件间的数据传递和通信。
相关问题
$bus.$emit和$emit区别
通过引用和[2]的内容,可以得出以下结论:
- `$bus.$emit`是Vue中的一个方法,用于触发自定义事件。它的语法是`this.$bus.$emit('eventName', data)`,其中`eventName`是自定义事件的名称,`data`是要传递给监听器的数据。当调用`$emit`方法时,会触发所有监听该事件的回调函数,并将数据传递给这些回调函数。
- `$emit`是Vue中的一个全局方法,用于触发组件实例上的事件。它的语法是`vm.$emit('eventName', data)`,其中`vm`是组件实例,`eventName`是事件的名称,`data`是要传递给监听器的数据。当调用`$emit`方法时,会触发该组件实例上绑定的事件监听器,并将数据传递给这些监听器。
简而言之,`$bus.$emit`是在Vue实例的原型上定义的方法,用于触发自定义事件;而`$emit`是Vue实例上的方法,用于触发组件实例上的事件。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [组件传值:父子$emit,props.兄弟$bus.$on.$emit,](https://blog.csdn.net/wangyangzxc123/article/details/121457851)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *2* *3* [[vue] 全局事件总线 this.$bus.$emit this.$bus.$on ,可以实现任意组件间通信](https://blog.csdn.net/qq_14993591/article/details/121221114)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
$bus.$on在created里父组件$bus.$emit传递的值
抱歉我之前理解错了你的问题。如果在子组件的 `created` 钩子函数中使用 `$bus.$on`,那么确实无法保证在父组件的 `$bus.$emit` 之前能够接收到值。这是因为在 `created` 钩子函数中,子组件还没有注册事件监听器。
为了解决这个问题,你可以将 `$bus.$on` 放在 `mounted` 钩子函数中,因为 `mounted` 钩子函数在组件挂载完成后执行,此时父组件的 `$bus.$emit` 已经触发了。
下面是修改后的示例代码:
```javascript
// 子组件
export default {
mounted() {
this.$bus.$on('custom-event', data => {
console.log(data); // 输出:传递给子组件的值
});
}
}
```
请注意,确保在不再需要事件监听时使用 `$off` 方法取消监听,以避免潜在的内存泄漏问题。
希望这次能解决你的问题!如果还有其他疑问,请随时提问。
阅读全文