关于$on的问题

来源:3-6 如何用自定义事件进行vue组件通讯

ropeskipper

2021-05-23

1、this也是Vue的实例,为什么不能直接用this来$on绑定自定义事件
2、$on可以个一个事件名绑定多个回调的话,$emit的时候如何给回调传参啊

写回答

2回答

俊逸_ajay

2021-12-24

其实还有可以不用再创建一个空的vue实例,可以在项目创建vue实例时,在beforeCreate中给vue显示原型上新增一个属性:

//创建vm
new Vue({
    el:'#app',
    render: h => h(App),
    beforeCreate() {
        Vue.prototype.$bus = this //安装全局事件总线
    },
})

然后在所有该vue实例项目中使用了

this.$bus.$emit('hello',this.name)

在其它组件中调用,相当于沿着原型链一直往上找到$bus,而$bus存放的是vue的实例。

1
0

双越

2021-05-24

第一,因为自定义组件要用全局的,而 this 只是当前组件,而且这个组件有可能会接下来被销毁。所以,一定要有一个全局的、第三方的、永远不会被销毁的自定义事件对象。

第二,$emit 传递参数很简单,例如:

vm.$on('test', function (msg) {
    console.log(msg)
})
vm.$emit('test', 'hi')// => "hi"


0
2
双越
回复
ropeskipper
这样设计不合理,一个事件就一个 on ,复杂度低。
2021-05-24
共2条回复

2024版 前端框架及项目面试 聚焦Vue3/React/Webpack

面向1-3年前端的框架及项目面试“刚需内容”

4663 学习 · 1644 问题

查看课程