Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

171
Vistas
¿Hay alguna forma de usar modificadores de eventos dinámicos en VueJS?

Estoy creando un componente de botón en VueJS. Hice un evento dinámico con un accesorio, además de una función de evento y parámetros como accesorios también. Eso funciona bien, el padre puede configurar cualquier evento para activar un método. Sin embargo, también quiero poder establecer modificadores en ese evento, pero no veo la manera de hacerlo. ¿Es posible?

El componente del botón:

 <button class="btn" :class="[styles, cssClasses]" role="button" @[event]="onEvent(eventParams)" :disabled="disabled"> <slot></slot> </button>

El padre:

 <Button :event="'click'" :onEvent="logEvent" :eventParams="'This is a test message'">Test button</Button>

Agregar un modificador estático al evento dinámico funciona @[event].prevent=... pero quiero poder configurar el modificador desde un accesorio, o no tenerlo en absoluto.

También intenté configurar un objeto de escucha de eventos, pero tampoco puedo ver una forma de agregar modificadores a esos. Al menos en esta opción puedo pasar el evento y prevenir el incumplimiento a la antigua, como hacían nuestros abuelos.

 moveAllListeners() { const me = this return Object.assign({}, this.$listeners, { click(e) { e.preventDefault() me.moveAll() }, mouseenter(e) { console.log('Mouse entered'); } } ) }
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Los modificadores de eventos no pueden ser dinámicos porque se aplican en "momento de compilación" (cuando se compila la plantilla).

Tendrás que implementar todo esto manualmente; cómo lo hace exactamente depende de usted, pero podría ser algo como esto:

 <button @[event]="onEvent">
 props: [ 'event', 'eventParams', 'eventPrevent', ], methods: { onEvent(e) { if (this.eventPrevent) { e.preventDefault() } // Use this.eventParams here... } }

No estoy seguro de cuáles son sus requisitos, pero parece que este es un mal enfoque desde el principio. ¿Por qué un componente de botón personalizado necesita este tipo de comportamiento? ¿Por qué necesita Button para operar así?

about 4 years ago · Juan Pablo Isaza Denunciar

0

No estoy muy seguro de por qué necesitarías operar tal magia. ¿Puede proporcionar un poco más de información sobre sus requisitos, por favor?

¿Por qué no puedes simplemente hacer esto?

 <button class="btn" :class="[styles, cssClasses]" role="button" :disabled="disabled" v-on="$listeners" > <slot></slot> </button>
 <Button @click="logEvent('This is a test message')"> Test button </Button>

La única razón por la que puedo imaginar que requeriría tener esto en un accesorio sería debido a algunas acciones dinámicas configuradas.

Pero podría tener algo como esto en su componente principal:

 <template> <Button v-for="(button, i) in dynamicButtons" :key="`button_${i}`" @[button.event]="button.action" > Test button </Button> </template> <script> export default { name: 'Sandbox', data () { dynamicButtons: [ { content: 'Test button 1', event: 'click', action: () => logEvent('Click w/o prevention') }, { content: 'Test button 2', event: 'click', action: (e) => { e.preventDefault() logEvent('Click with prevention') } }, { content: 'Test button 3' event: 'mouseenter', action: logEvent('Mouse entered') } ] }, /* ... */ } </script>
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda