首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何发出文本输入的整个值?

如何发出文本输入的整个值?
EN

Stack Overflow用户
提问于 2022-03-11 19:42:43
回答 1查看 322关注 0票数 1

MyComponent.vue:

代码语言:javascript
复制
<BaseInput
    id="name"
    v-model:modelValue="user.name"
    type="text"
    label="Name"
    name="name"
    placeholder="Name"
/>

BaseInput.vue:

代码语言:javascript
复制
<template>
<input
    :id="id"
    class="peer absolute block w-full border-0 bg-transparent p-0 px-3 text-base text-purple-500 placeholder-orange-500 transition-all duration-100 ease-in-out focus:ring-0 sm:text-sm"
    :class="inputHasValue ? 'top-5' : 'top-3'"
    :type="type"
    :name="name"
    :placeholder="placeholder"
    :value="value"
    @input="(event) => $emit('update:modelValue', event.target.value)"
    @focus="handleInputFocus"
    @keyup="handleInputKeyup"
/>
...
</template>


<script>
...
emits: ['update:modelValue'],
...
</script>

这里的情况很好。当我输入输入时,我可以看到v模型是在MyComponent.vue中填充的。

代码语言:javascript
复制
user:Reactive
   name:"d"

我看到的问题是,这个值正在被我最后输入的任何东西所取代。例如,如果我输入文本"abcd“,只有"d”会显示在v-模型中。

我如何发出整个值,以便"abcd“显示?

代码语言:javascript
复制
user:Reactive
   name:"abcd"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-11 22:41:14

问题是<input>没有模型。它只将其value属性绑定到本地value ref,该本地ref很可能最初为空白或null,并且该ref从未更新。

input-event发出<input>元素的当前值,并附加新输入的字符。由于当前值在这种情况下总是为空,因此事件数据只包含新字符。

但是,该组件似乎不是根据发出的内容(例如,筛选出字符)来修改value引用的,因此它不需要保留它的本地副本。

删除不必要的value引用并将<input>value直接绑定到modelValue将解决这个问题:

代码语言:javascript
复制
<!-- <input :value="value"> --> ❌

<input :value="modelValue"> ✅

演示

附带注意:v-model:modelValue可以简化为v-model,因为"modelValue"是默认的绑定参数:

代码语言:javascript
复制
<BaseInput v-model:modelValue="user.name" />
<!-- is the same as: -->
<BaseInput v-model="user.name" />
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71443891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档