'v-on' directives require a value or verb modifier (like 'stop' or 'prevent')

Viewed 2440

I created two files named Tasks.vue and Task.vue. I emit an action from Task.vue named 'delete-task', and I want to emit it again in Tasks.vue using @delete-task

eslint-plugin-vue gives me the following error:

'v-on' directives require a value or verb modifier (like 'stop' or 'prevent'

Tasks.vue

<template>
  <div class="tasks-container">
    <div v-for="task in tasks" :key="task.id">
      <Task @delete-task:"$emit('delete-task', task.id)" :task="task" />
    </div>
  </div>
</template>

<script>
import Task from "./Task.vue";
export default {
  name: "Tasks",
  props: {
    tasks: Array,
  },
  components: {
    Task,
  },
  emits: ['delete-task']
};
</script>

Task.vue

<template>
  <div :class="[task.reminder ? 'reminder' : '', 'task']">
    <h3>
      {{ task.text }}
      <i @click="onDelete(task.id)" class="fa fa-times"></i>
    </h3>
    <p>{{ task.day }}</p>
  </div>
</template>
<script>
export default {
  name: "Task",
  props: {
    task: Object,
  },
  methods: {
    onDelete(id) {
      this.$emit('delete-task', id)
    },
  },
};
</script>

Why do I need a 'stop' or 'prevent' modifier?

2 Answers

The event value inside template is assigned using = instead of :

@delete-task="$emit('delete-task', task.id)"

This line is wrong:

<Task @delete-task:"$emit('delete-task', task.id)" :task="task" />

fixed it by :

<Task @delete-task="$emit('delete-task', task.id)" :task="task" />
Related