Как узнать, из какого потомка создается событие в vue.js 3?

Если у меня есть компонент:

<product-display 
  :premium = "premium" 
  :cart = "cart" 
  @add-to-cart='updateCart' 
  @remove-from-cart='removeById'>
</product-display>

с помощью этих двух методов:

 methods: {
        removeFromCart() {
            this.$emit('remove-from-cart', this.variants[this.selectedVariant].id)
        },
        addToCart() {
            this.$emit('add-to-cart', this.variants[this.selectedVariant].id)
        },

А у родителя есть такие методы:

 methods: {
        updateCart (id) {
            this.cart.push(id)
        },
        removeById(id) {
            const index = this.cart.indexOf(id)
                if (index > -1) {
                    this.cart.splice(index, 1)
                }
        }
    }

Есть ли способ удалить один метод из родительского и использовать только updateCart(id), зная, из какого дочернего элемента генерируется событие?

Итак, в HTML вы получите:

 @add-to-cart='updateCart' 
 @remove-from-cart='updateCart'
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
17
1

Ответы 1

Вы можете сделать это несколькими способами. Мой предпочтительный вариант такой:

// Component.vue
updateCart(action) {
  this.$emit('update-cart', {
    id: this.variants[this.selectedVariant].id), action
}
//Parent.vue
@update-cart='updateCart'

methods: {
  updateCard({id, action}) {
    if (action == 'add') {
      return this.cart.push(id);
    }
    this.card = this.card.filter(x => x != id);
  }
}

Другие вопросы по теме