VueJS излучает(«вход») 2 значения

#javascript #vue.js

Вопрос:

У меня есть компонент vue, который имеет вход, поэтому для использования v-модели я использую это

 <template>
  <div class="input-field">
    <input
      type="text"
      v-model="value"
      :id="inputId"
      placeholder=""
      @input="updateText"
    />
    <label :for="inputId">{{ label }}</label>
  </div>
</template>

<script>
import { ref } from "@vue/reactivity";
export default {
  name: "InputField",
  props: {
    value: { type: String },
    inputId: { type: String },
    label: { type: String },
  },
  setup(props, { emit }) {
    const value = ref("");
    const updateText = () => {
      emit("input", value.value);
    };
    return {
      value,
      updateText,
    };
  },
};
</script>

<style lang="less" scoped>
</style>
 

Поэтому, когда я консолировал, я использовал v-модель в родительском компоненте, но значение не меняется, поэтому я попытался распечатать @входные данные .. Он возвращает 2 значения.. Значение входных данных и объекта ref

 <div class="login-box">
    <InputField
        v-model="username"
        label="Username "
        inputId="username"
        @input="printUser"
    />
    <input type="text" />
<div>{{ username }}</div>
 

Любая помощь.. Спасибо!

Ответ №1:

В vue 3 v-model на компоненте находится синтаксический сахар для

 <input-field
  :model-value="username"
  @update:model-value="username = $event"
></input-field>
 

таким образом, компонент поля ввода должен быть

 <template>
  <div class="input-field">
    <input
      type="text"
      :value="modelValue"
      :id="inputId"
      placeholder=""
      @input="updateText"
    />
    <label :for="inputId">{{ label }}</label>
  </div>
</template>

<script>
import { ref } from "@vue/reactivity";
export default {
  name: "InputField",
  props: {
    ...
    modelValue: { type: String },
    ...
  },
  setup(props, { emit }) {
    const updateText = (e) => {
      emit("update:modelValue", e.target.value);
    };
    return {
      updateText,
    };
  },
};
</script>
 

Комментарии:

1. Это все равно не работает.. V-модель в родительском компоненте по-прежнему пуста. И я использовал то же самое в вопросе, прежде чем он сработал правильно, но не в этом проекте..