Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

280
Visualizações
¿Directiva personalizada para reemplazar el evento @mouseenter + @mouseleave?

Tengo muchos elementos en los que @mouseenter establece un valor en true y @mouseleave lo establece en false . Básicamente, lo que necesito es una forma de establecer una variable reactiva en true si el mouse pasa el elemento.

He estado tratando de descubrir cómo escribir dicha custom directive de los documentos , pero solo menciona cómo usar .focus() js function en un elemento. ¿Qué funciones js se usarían para dicha directiva?

Algo como:

 const vHover = { mounted: (el) => { el.addEventListener('mouseenter', state.hover=true) el.addEventListener('mouseleave', state.hover=false) } }
about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Creo que podrías hacer algo como:

 app.directive('hover', { created(el, binding) { const callback = binding.value el.onmouseenter = () => callback(true) el.onmouseleave = () => callback(false) }, unmounted(el) { el.onmouseenter = null el.onmouseleave = null } })

Modelo:

 <button v-hover="onHoverChange">Example</button>

Métodos:

 onHoverChange(isHovered) { console.log(isHovered) }
about 4 years ago · Juan Pablo Isaza Relatório

0

Creo que este no es el uso previsto de las directivas. El valor del estado no puede ser mutado dentro de la directiva. Puede pasar la variable a través del binding , pero no puede actualizarla.

vinculante: un objeto que contiene las siguientes propiedades.

  • value : El valor pasado a la directiva. Por ejemplo, en v-my-directive="1 + 1", el valor sería 2.
  • oldValue : el valor anterior, solo disponible en beforeUpdate y actualizado. Está disponible tanto si el valor ha cambiado como si no.

así que si haces el.addEventListener('mouseenter', binding.hover=true) , como habrás notado, no actualizará el estado.

Sin embargo, si usamos los internos (PSA: aunque no se recomienda ya que podrían cambiar en cualquier momento ), podría obtener una instancia usando vnode y usar binding.arg para indicar qué Proxy ( state )

para que pueda obtener la variable reactiva con vnode.el.__vueParentComponent.data[binding.arg]

 <script> export default { data(){ return { state: { hover:false } } }, directives: { hover: { mounted(el, binding, vnode) { el.addEventListener('mouseenter', () => { vnode.el.__vueParentComponent.data[binding.arg].hover = true }) el.addEventListener('mouseleave', () => { vnode.el.__vueParentComponent.data[binding.arg].hover = false }) }, } } } </script> <template> <h1 v-hover:state="state">HOVER {{ state }}</h1> </template>

Enlace de juegos SFC

por supuesto, es posible que desee agregar el unmounted e incluso considerar agregar mouseleave dinámicamente solo cuando se dispara mouseenter

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda