# vue/custom-event-name-casing

enforce custom event names always use "kebab-case"

  • βš™οΈ This rule is included in all of "plugin:vue/vue3-essential", "plugin:vue/essential", "plugin:vue/vue3-strongly-recommended", "plugin:vue/strongly-recommended", "plugin:vue/vue3-recommended" and "plugin:vue/recommended".

# πŸ“– Rule Details

This rule enforces using kebab-case custom event names.

Event names will never be used as variable or property names in JavaScript, so there’s no reason to use camelCase or PascalCase. Additionally, v-on event listeners inside DOM templates will be automatically transformed to lowercase (due to HTML’s case-insensitivity), so v-on:myEvent would become v-on:myevent – making myEvent impossible to listen to.

For these reasons, we recommend you always use kebab-case for event names.

See Guide - Custom Events for more details.

<template> <!-- βœ“ GOOD --> <button @click="$emit('my-event')" /> <!-- βœ— BAD --> <button @click="$emit('myEvent')" /> </template> <script> export default { methods: { onClick () { /* βœ“ GOOD */ this.$emit('my-event') this.$emit('update:myProp', myProp) /* βœ— BAD */ this.$emit('myEvent') } } } </script>
Now loading...

# πŸ”§ Options

{
  "vue/custom-event-name-casing": ["error", {
    "ignores": []
  }]
}
  • ignores (string[]) ... The event names to ignore. Sets the event name to allow. For example, custom event names, Vue components event with special name, or Vue library component event name. You can set the regexp by writing it like "/^name/" or click:row or fooBar.

# "ignores": ["fooBar", "/^[a-z]+(?:-[a-z]+)*:[a-z]+(?:-[a-z]+)*$/u"]

<template> <!-- βœ“ GOOD --> <button @click="$emit('click:row')" /> <button @click="$emit('fooBar')" /> <!-- βœ— BAD --> <button @click="$emit('myEvent')" /> </template> <script> export default { methods: { onClick () { /* βœ“ GOOD */ this.$emit('click:row') this.$emit('fooBar') /* βœ— BAD */ this.$emit('myEvent') } } } </script>
Now loading...

# πŸ“š Further Reading

# πŸ” Implementation