Событие запускается дважды — дочерним и родительским

#vue.js #events #vuetify.js

Вопрос:

Я изо всех сил пытаюсь выяснить, почему функция updateOptions() запускается дважды в приведенном ниже простом примере. Я смог определить (просто войдя в журнал), что событие @change в заголовке компонента для фильтрации по заголовку запускается первым, а затем родительский элемент запускает параметры @update:. Чтобы сохранить приведенный ниже код exmaple как можно более простым, я удалил все остальное, что, по-моему, не является проблемой

  <v-data-table
     @update:options="updateOptions"  // parent event triggered (should not happen)
 >
     <template v-slot:[`header.book`]>
         <component-to-filter-by-header
             @change="updateOptions(...);" // child event triggered
         />
     </template>
     ...
</v-data-table>
 

Может ли кто-нибудь помочь мне понять, почему это происходит и как предотвратить запуск события родительским компонентом

Овации

Ответ №1:

Причина @update:options="updateOptions" срабатывания заключается в том, что объект options содержит информацию о заголовках, как вы можете видеть в документации здесь

И вот как решить эту проблему

Вы можете поместить модификатор .stop в ComponentToFilterByHeader дочерний компонент

 <template>
  <div>
    <v-btn @click.stop="$emit('change')">click</v-btn>
  </div>
</template>
 

Надеюсь, это сработает!