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

192
Visualizações
El elemento de entrada personalizado de la API de composición no actualiza el valor

Estoy tratando de crear un componente de entrada personalizado con la API de composición en Vue 3, pero cuando intento actualizar el valor con el modelo v, obtengo una cadena vacía en lugar del valor del evento y cuando reemplazo el componente de Input personalizado con HTML input el valor. se está actualizando como se esperaba

Componente de entrada:

 <template> <input :type="type" :id="name" :name="name" :placeholder="placeholder" class="input" v-model="modelValue" /> </template> <script lang="ts"> import { computed } from 'vue'; export default { name: 'Input', props: { modelValue: { type: String, required: true, }, name: { type: String, required: true, }, type: { type: String, default: 'text', }, placeholder: { type: String, required: true, }, }, setup(props: { value: string }, { emit }) { const modelValue = computed({ get() { return props.modelValue; }, set(value) { emit('input', value); }, }); return { modelValue }; }, }; </script>
 <form @submit.prevent="handleSubmit"> <Input :name="name" placeholder="Name*" v-model="name" /> <Button>Send</Button> </form>

Método de configuración:

 setup() { const name = ref(''); function handleSubmit(data: Event) { console.log(data, name.value); } watch(name, (old, newValue) => { console.log(name, old, newValue); }); return { name, handleSubmit }; },
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Hay un par de errores y advertencias en su código:

  • debe declarar eventos emitidos en la opción emits ( más sobre esto aquí )
  • no tenía un apoyo de value transmitido desde el componente principal a la Input (por lo tanto, lo eliminé)
  • si desea hacer la "sincronización fácil" con v-model , entonces es mejor emitir un evento personalizado llamado update:modelValue (donde modelValue es el valor que desea vincular como apoyo, por ejemplo, update:name ; más sobre esto aquí )
  • NO debe nombrar una variable en la función de setup de la misma manera que un prop (esto es solo sensibilidad: eventualmente estropeará qué es qué)

 const { computed, ref, } = Vue const Input = { name: 'Input', props: { name: { type: String, required: true, }, type: { type: String, default: 'text', }, placeholder: { type: String, required: true, }, }, emits: ['update:name'], setup(props, { emit }) { const modelValue = computed({ get() { return props.name; }, set(value) { emit('update:name', value); }, }); return { modelValue }; }, template: ` <input :type="type" :id="name" :name="name" :placeholder="placeholder" class="input" v-model="modelValue" /> ` } const App = { setup() { const name = ref(''); function handleSubmit(data) { console.log(data, name.value); } return { name, handleSubmit }; }, template: ` Name Ref: {{ name }}<br /> <form @submit.prevent="handleSubmit"> <Input :name="name" placeholder="Name*" v-model="name" /> <button type="submit">Send</button> </form> ` } const vm = Vue.createApp(App) vm.component('Input', Input) vm.mount('#app')
 <script src="https://unpkg.com/vue@next"></script> <div id="app"></div>

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