Vue组件—自定义事件

308 阅读1分钟

什么是自定义事件?

复习浏览器事件

该章节主要为Vue组件—自定义事件的学习,对浏览器原生事件仅作简短复习说明

定义

  • 理解为一种 信号 ,当浏览器捕获到该信号时执行特定的 处理程序

    这种处理程序也就是 事件的回调函数

  • 当用户进行某些行为操作时,运行某 JS代码的的方式。

分类

  • 鼠标事件
  • 键盘事件
  • 表单事件

定义事件处理程序的几种方式

HTML 特性
<input value="Click me" onclick="alert('点我呀!')" type="button">
DOM 属性
<input type="button" onclick="countRabbits()" value="Count rabbits!">
<script>
  function countRabbits() {
    for(let i=1; i<=3; i++) {
      alert("Rabbit number " + i);
    }
  }
</script>

回调函数中 this

  • this指向触发该事件的元素

setAttribute定义事件产生的问题

// 点击 <body> 将产生 error,
// 因为特性总是字符串的,函数变成了一个字符串
document.body.setAttribute('onclick', function() { alert(1) });

Vue自定义事件

自定事件的特点

  • 事件名自定义
  • 触发事件的时机自定义

绑定自定义事件的方式

组件标签绑定
 <School>
      :getStudents="getStudents"
      @getTeacherAmount="getTeacherAmount"
 </School>
$ref绑定
  
  <Student :students="students" ref="student"></Student>
  ....
  mounted() {
    // 为组件绑定自定义事件,
    this.$refs.student.$on("showbubu", this.showbubu);
  },
比较标签绑定 $ref绑定
  • 通过$ref可以实现动态绑定

自定义事件能做什么?

  • 子组件向父组件传递信息

如何使用自定义事件?

接收信息的组件

  • 定义事件的回调函数
  • 回调函数的参数 为传递信息

发布信息的组件

  • 触发事件

    ​
    <ul v-for="student in students" :key="student.id">
          <li>
            <div>姓名:{{ student.name }}</div>
            <button @click="confirmInfo(student.name)">找到布布</button>
          </li>
        </ul>
      
      methods: {
        confirmInfo(name) {
       //触发事件
          this.$emit('showbubu',name)// name: 传递的信息
      },
    

使用自定义事件注意事项

解绑自定义事件

this.$off('showbubu')//解绑单个事件
this.$off(['event1','event2'])//解绑多个
this.$off()//解绑所有事件

一些tips

  • 使用chrome中 vue开发者工具 更清晰查看自定义事件操作