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

138
Visualizações
Modelo V en componente de etiqueta div

Hay un problema al usar v-model para etiquetas div . Aparentemente, las etiquetas div no permiten v-model y he decidido crear mi sección de comentarios como un componente. Necesitaba asignar esta área de texto div tal como está debido a razones de UI/UX. etiquetas textarea , input , etc., que yo sepa, estas etiquetas no son compatibles con contenteditable="true" ; Necesito expandir la altura del campo de entrada a medida que un usuario escribe sus comentarios. A continuación se muestra el componente vue que importé en mi vue principal.

 <!-- CommentSection.vue -->
<template>
 <div id="chatId" contenteditable="true" placeholder="Leave a message" class="overflow-hidden block mx-4 text-left p-2.5 w-full text-sm text-gray-900 bg-white rounded-2xl border border-gray-300 focus:ring-blue-500 focus:border-blue-500"/>
</template>

<style>
#chatId[contenteditable="true"]:empty:not(:focus):before {
 content: attr(placeholder)
}
</style>

En mi archivo de vue, lo importé y usé v-model en él, así.

 <!--MainPage.vue-->
<template>
...
...
 <CommentSection v-model="comment"/>
 <button @click="submitPost()"> Submit </button>
...
...
...
</template>
<script>
import CommentSection from '@/components/CommentSection.vue'

export default{
 name: 'MainPage',
 data(){
 return{
 comment: '',
 }
 },
 components: { CommentSection },
 methods:{
 submitPost(){
 console.log(this.comment);
 },
 },
}
</script>

Sin embargo, cuando reviso mi consola, me da el valor "nulo" o simplemente nada. ¿Hay alguna manera de arreglar esto? ¿O es la forma en que lo implementé lo que causa el problema? ¡Gracias de antemano a cualquiera que pueda ayudar!

EDITAR: Aquí está el código en ejecución en codesandbox .

almost 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Resolví tu problema y el código es el siguiente. espero haber ayudado

Al agregar @ a la etiqueta div, podemos ver los cambios en el contenido de la etiqueta en el método de cambio. Y en ese método, use emit$ para compartir su valor con otros componentes

 <!-- CommentSection.vue -->
<template>
 <div id="chatId" @input="chanage" contenteditable="true" placeholder="Leave a message" class="overflow-hidden block mx-4 text-left p-2.5 w-full text-sm text-gray-900 bg-white rounded-2xl border border-gray-300 focus:ring-blue-500 focus:border-blue-500"/>
</template>

<script>
export default {
 methods: {
 chanage (e) {
 this.$emit('value-div', e.target.textContent)
 }
 }
}
</script>

<style>
#chatId[contenteditable="true"]:empty:not(:focus):before {
 content: attr(placeholder)
}
</style>

Y aquí tenemos los props creados por $emit, cuyo valor inicializamos en la variable comentario. En realidad, tiene una función similar a v-model.

 <!--MainPage.vue-->
<template>
...
...
 <CommentSection @value-div="(value)=>comment = value"/>
 <button @click="submitPost()"> Submit </button>
...
...
...
</template>
<script>
import CommentSection from '@/components/CommentSection.vue'

export default{
 name: 'MainPage',
 data(){
 return{
 comment: '',
 }
 },
 components: { CommentSection },
 methods:{
 submitPost(){
 console.log(this.comment);
 },
 },
}
</script>
almost 4 years ago · Santiago Trujillo 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