关系: this.$emit的作用就是触发自定义函数
自定义事件是给组件使用的
由于是在<Student>标签绑定了自定义事件,要触发就找student组件。事件触发后回调用methods里的demo()方法.
//父组件中使用子组件标签 <Student v-on:atguigu='demo'>
<Student @atguigu='demo'>
//子组件触发父组件中demo方法
demo(){
console.log("demo被调用了")
}
//子组件触发时携带参数
demo(name){
console.log('demo被调用了',name) //atguigu事件触发后的回调
}
那么来看看在子组件:student组件是如何触发父组件里我们自定义的事件atguigu。
我们也可以把this.$emit()写在watch里,就是一个触发时机而已。
<button @click="sendStudentName" >把学生名给app</button>
sendStudentName(){
this.$emit('atguigu') //在组件触发自定义事件atguigu
//也可以带参传值
//this.$emit('atguigu',"我是子组件传给父组件的值")
}
自定义事件还有一种写法。
写在mounted中,表示在父组件挂载完毕后调用
<Student ref="student"/>
methods:{
getStudentName(name){
console.log("父组件收到了学生名:",name)
}
}
mounted(){
this.$refs.student.$on('atguigu',this.getStudentName)
}