1.它们是干什么用的,能帮我们做什么?
通过$on
我们可以自定义一个事件,并且为这个事件添加对应的处理函数,通过$emit
可以触发自定义的事件,执行它对应的处理函数
好处:能够将事件定义和消费分开,实现逻辑解耦
2.该如何使用它们:
2.1通过$on()
方法注册一个自定义事件’myEvent’(当然可以取其他名字),并添加事件的处理函数,如下:(handleEvent是我自定义的处理函数)
this.$on('myEvent',this.handleEvent)
2.2 通过$emit()
方法触发事件’myEvent’,并为这个事件对应的处理函数添加所需参数,如下:
this.$emit('myEvent','hello')
完整代码如下:
<body>
<div id="app">
<button @click="clickHandle">click</button>
</div>
</body>
<script>
var vm=new Vue({
el:"#app",
data:{},
created(){
this.$on('myEvent',this.handleEvent)
},
methods:{
handleEvent(e){
console.log(e)
},
clickHandle(){
this.$emit('myEvent','hello')
}
}
})
</script>
3.扩展用法
3.1 可以为多个自定义事件添加同一个处理函数
var vm=new Vue({
el:"#app",
data:{},
created(){
/*通过给$on的第一个参数添加数组的方式为不同的事件添加处理函数*/
this.$on(['myEvent','myEvent1'],this.handleEvent)
},
methods:{
handleEvent(e){
console.log(e)
},
clickHandle(){
this.$emit('myEvent1','hello')
}
}
})
3.2可以为一个自定义事件添加多个处理函数(先定义的先触发)
var vm=new Vue({
el:"#app",
data:{},
created(){
/*通过给$on的第一个参数添加数组的方式为不同的事件添加回调函数*/
this.$on('myEvent',this.handleEvent)
this.$on('myEvent',this.handleEvent1)
},
methods:{
handleEvent(e){
console.log(e)
},
handleEvent1(e){
console.log(e+" hi")
},
clickHandle(){
this.$emit('myEvent','hello')
}
}
})
点击按钮输出:
hello
hello hi