从Node.js事件触发器到Vue自定义事件的深入讲解
作者:Pinocchioooo 时间:2024-05-03 15:54:28
Node.js中的事件触发器所引发的思考
今天在看 Node.js 文档的时候讲到事件触发器,其中的 emit 方法让我想到了 Vue 中的自定义事件,借此我对 Vue 又有了新的理解,所以将我的理解记录下来,留作学习笔记。
Node.js中的事件触发器
Node.js 为我们提供了一个事件模块:EventEmitter,我们可以用它来处理事件
const EventEmitter = require('events')
const eventEmitter = new EventEmitter()
eventEmitter 对象上有两个方法:on 和 emit
on 用于添加自定义事件,注册回调函数
emit 用于触发事件,并将参数传递给回调函数
eventEmitter.on('start', (e) => {
console.log(e)
})
eventEmitter.emit('start', 'started')
控制台将会打印 started
Vue中的自定义事件
给组件添加自定义事件,下面示例代码中的 enlarge-text 事件就是我们自己定义的事件,onEnlargeText 则是事件触发时所要执行的回调函数,这里的 onEnlargeText 是一个函数指针,指向 methods 中所定义的 onEnlargeText 函数。既然是回调函数,所以可能会有参数传给它,那么自定义事件的回调函数中的参数是谁传递给它的,具体含义又是什么呢?
<blog-post
...
@enlarge-text="onEnlargeText">
</blog-post>
methods: {
onEnlargeText: function (enlargeAmount) {
this.postFontSize += enlargeAmount
}
}
子组件事件处理中可以通过内建的 「$emit」 方法传入父组件自定义事件名来触发这个自定义事件,并且通过 「$emit」 的第二个参数将需要传递给父组件的数据抛出,这样,自定义事件的回调函数中的参数来源也就明白了,就是 「$emit」 方法的第二个参数,这里可以直接抛出一个更加灵活的对象。
<button @click="$emit('enlarge-text', 0.1)">
Enlarge text
</button>
到这里我们可以看到,Vue 中的自定义事件和 Node.js 中的事件触发器的理念非常相似,Vue 中自定义事件的注册是在父组件中完成的,而触发是在子组件中完成的。至此,就完成了对 Vue 自定义事件的解释。
参考资源
nodejs.cn/learn/the-n…
cn.vuejs.org/v2/guide/co…
来源:https://juejin.im/post/5ef2fff86fb9a07e6d7099da