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

182
Vistas
Cómo pasar accesorios de enfoque en componentes VueJS

Tengo una Input secundaria componente:

 <template> <div class="basic-input-outer" :style="styles"> <p class="paragraph-small">{{ title }}</p> <input ref="name" :type="type" class="basic-input"> </div> </template> <script> export default { name: "Input", props: ['type', 'styles', 'title', 'focus'], watch: { focus: function() { this.setFocus() } }, methods: { setFocus() { this.$refs.name.focus() } } } </script> <style lang="scss"> @import "../assets/css/components/Input"; </style>

Y tengo un componente principal donde trabajo con esta entrada:

 <div class="login-options"> <p class="choose" @click="chooseLogin('email')">With Email</p> <div class="vertical-line" /> <p class="choose" @click="chooseLogin('phone')">With Phone Number</p> </div> <div v-if="loginWithEmail"> <Input :focus="emailFocus" :title="'Email'" :type="'email'" /> </div> <div v-else> <Input :focus="phoneFocus" :title="'Phone number'" :type="'email'" /> </div> ... chooseLogin(option) { if (option === 'email') { this.loginWithEmail = true this.emailFocus = true } else { this.loginWithEmail = false this.phoneFocus = true } }

Entonces, el problema es que cuando activo la función, solo se enfoca una vez en un campo y luego se detiene. Quiero hacer que los accesorios de focus funcionen de esa manera, de modo que cuando se active, el campo se enfocará y funcionará no solo una vez, como en este caso.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Aquí está la solución. En realidad, fue porque v-if . v-if solo elimina los elementos de DOM, entonces, la mejor manera de resolver tales problemas es usar estilo condicional con display: none :

Input :

 <template> <div class="basic-input-outer" :style="styles"> <p class="paragraph-small">{{ title }}</p> <input ref="name" :type="type" class="basic-input"> </div> </template> <script> export default { name: "Input", props: ['type', 'styles', 'title', 'focus'], watch: { focus: function() { if (this.focus) this.$refs.name.focus() } } } </script> <style lang="scss"> @import "../assets/css/components/Input"; </style>

Y componente principal:

 <Input :style="[!loginWithEmail ? {'display': 'none'} : {'': ''}]" :focus="emailFocus" :title="'Email'" :type="'email'" /> <Input :style="[loginWithEmail ? {'display': 'none'} : {'': ''}]" :focus="phoneFocus" :title="'Phone number'" :type="'email'" /> ... chooseLogin(option) { if (option === 'email') { this.loginWithEmail = true this.emailFocus = true this.phoneFocus = false } else { this.loginWithEmail = false this.emailFocus = false this.phoneFocus = true } }
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