Tengo un problema aquí que parece que no puedo solucionar: me gustaría tener un interruptor simple para un componente usando $emit
este es mi index.vue :
<div v-for="(filteredArticles, categoryKey) in groupedCategories" :key="categoryKey" class="l" @listen-button-event="toggle" > <CategoryWrapper :title="categoryKey" /> </div> methods: { toggle () { alert('I did something') console.log('ping') this.isActive = !this.isActive } }este es mi componente:
<div :class="{ active: isActive }" @click="changeComponent()" > <a>{{ title }}</a> </div> data () { return { isActive: false } }, methods: { changeComponent () { this.$emit('listenButtonEvent') } }no parece hacer nada...
listen-button-event no debería estar en el div , debería estar en el componente CategoryWrapper .
<div v-for="(filteredArticles, categoryKey) in groupedCategories" :key="categoryKey" class="l" > <CategoryWrapper :title="categoryKey" @listen-button-event="toggle" /> </div>Los oyentes deben ser camelCas 'ed así
<CategoryWrapper :title="categoryKey" @listenButtonEvent="toggle" /> y no kebab-case 'ed.
Como puede ver en las herramientas de desarrollo de Vue, ya que está emitiendo listenButtonEvent aquí.
Una mejor convención es emitir una update:listenButtonEvent por cierto, no puedo encontrar una recomendación oficial para eso nuevamente.