欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Vue自定义事件的写法

程序员文章站 2022-07-15 09:18:52
...

Vue自定义事件

事件名

不同于组件和 prop,事件名不存在任何自动化的大小写转换。而是触发的事件名需要完全匹配监听这个事件所用的名称。举个例子,如果触发一个 camelCase 名字(驼峰命名)的事件:

this.$emit('myEvent')

则监听这个名字的 kebab-case 版本是不会有任何效果的:

<!-- 没有效果 -->
<my-component @my-event="doSomething"></my-component>

不同于组件和 prop,事件名不会被用作一个 JavaScript 变量名或 property 名,所以就没有理由使用 camelCase 或 PascalCase 了。并且 v-on 事件监听器在 DOM 模板中会被自动转换为全小写 (因为 HTML 是大小写不敏感的),所以 v-on:myEvent 将会变成 v-on:myevent——导致 myEvent 不可能被监听到。

因此,推荐始终使用 kebab-case 的事件名

自定义事件的写法

以下两种方法通常用来完成父子组件之间的通信。

在App.vue里有这样一个方法,要将它传递给子组件

add (todo) {
  this.todos.unshift(todo);
}
  1. 使用v-on:绑定事件监听

    <my-component @add="add" />
    
    <!-- 在'my-component'里通过'$emit'来分发事件 -->
    this.&emit('add', '参数')
    
  2. 使用ref属性

    <my-component ref="myComponent"/>
    
    <!-- 在生命周期方法'mounted'上绑定自定义事件 -->
    mounted () {
    	this.$refs.header.$on('myComponent', this.add);
    }
    
    <!-- 在'my-component'里同样通过'$emit'来分发事件 -->
    this.&emit('add', '参数')