Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

174
Views
Comportamiento extraño de emisión de $ de VueJS

Estoy experimentando un comportamiento realmente extraño en mi aplicación Vue.

Tengo los siguientes dos componentes dentro de una de las vistas de mi enrutador:

 <bootstrap-table @showcurrent-click="handleShowcurrent" @edit-click="handleEdit" @delete-click="handleDelete" @generated-id="retrieveID" :columns="columns" :data="data" :options="options"></bootstrap-table> <device-showcurrent :device="showCurrent" :show="showShowCurrentModal" @modal-close="handleHideShowcurrentModal"></device-showcurrent>

El problema

Dentro de mi componente device-showcurrent , que es un modal de Bootstrap, manejo el evento hide.bs.modal con JQuery y emito un evento modal-close personalizado para poder manejar el evento desde el componente de vista del enrutador (puede ver en el anterior pieza de código @modal-close="handleHideShowcurrentModal" ) así:

 mounted: function(){ // Due to Javascript scope we assign this to a variable instance = this // This ID is generated on creation, and it works corretly. // I also checked that this JQuery event was triggering. $(`#${this.randomID}`).on('hide.bs.modal', e => { instance.$emit('modal-close') }) }

Pero el problema es que el evento no se emite desde device-modal , sino desde bootstrap-table (comprobado a través de VueDevTools), por lo que el primer código que publiqué no funciona, pero el siguiente sí:

 <bootstrap-table @showcurrent-click="handleShowcurrent" @edit-click="handleEdit" @delete-click="handleDelete" @generated-id="retrieveID" @modal-close="handleHideShowcurrentModal" :title="$t('message.audited_devices')" :columns="columns" :data="data" :options="options"></bootstrap-table> <device-showcurrent :device="showCurrent" :show="showShowCurrentModal"></device-showcurrent>

La pregunta

¿Que está sucediendo aquí? ¿Cómo es posible que el evento personalizado se esté emitiendo desde otro componente?

¡Muchos gracias!

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Encontré el problema. Cambié el gancho mounted a:

 mounted: function() { let _this = this; $(`#${this.randomID}`).on('hide.bs.modal', function(e) { _this.$emit('modal-close') }) }

Probablemente fue un problema de alcance. que ha sido resuelto por:

  1. Declarar la "copia de instancia" ( _this ) con let .
  2. Cambiar la función de devolución de llamada de la declaración de escucha de JQuery de la función de flecha a una función normal.

Todavía se siente bastante extraño porque el evento se estaba emitiendo, pero eso probablemente se debió a que también tenía una instance = this en mi componente bootstrap-table que estaba siendo de alcance global (tampoco estaba usando let ).

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!