Входные значения не сбрасываются — vuejs

#javascript #vue.js #vuejs2 #vue-component

#javascript #vue.js #vuejs2 #vue-компонент

Вопрос:

У меня есть компонент поля ввода уровня 2, который я использую. Я хочу выполнить сброс при нажатии кнопки из родительского компонента. Я пытаюсь передать данные в базовое начальное поле ввода, а затем передать обратно родительскому.

Мой вопрос заключается в том, что когда я пытаюсь сбросить данные при нажатии кнопки, значение из родительского компонента не работает. Для данных не установлено значение null, и значения остаются равными 123.

Что неправильно я делаю в следующем коде.

Любая помощь будет оценена.

Базовый ввод

 <template>
  <input
    v-model="myValue"
    type="number"
    inputmode="numeric"
    @input="$emit( 'input', $event.target.value )"
  />
</template>

<script>
  export default {
    data () {
      return {
        myValue: undefined
      };
    }
  }
 };
</script>
  

Уровень 01

 <template>
  <div class="c-floating-label">
    <input-number @input="passValue" />
  </div>
</template>

<script>
  import InputNumber from '../../atoms/form-controls/BaseInput';
  export default {
    components: {
      InputNumber
    }
    methods: {
      passValue: function (value) {
        this.$emit('input', value);
      }
    }
  };
</script>
  

Основной компонент

 <div>
  <level-01 
    :required="true"
    :v-model="datax.cardNumber"
    value="datax.cardNumber"
   />
 <button @click="reset">click me</button>
</div>
<script>
   data () {
      return {
        datax: {
          cardNumber: undefined
        }
      };
    },
   created() {
      this.datax.cardNumber = 123;
    },
    methods: {
      reset () {
        this.datax.cardNumber = null;
      },
</script>
  

Ответ №1:

Вы пропустили привязку к MainComponent

 <level-01 
  :required="true"
  :v-model="datax.cardNumber"
  :value="datax.cardNumber"
 />
  

Примечание: значение =»datax.cardNumber» является правильным
Во-вторых, на уровне 01 вы не привязываете значение prop (вообще не определено)

 <template>
  <div class="c-floating-label">
    <input-number @input="passValue" :value="$attrs.value"/>
  </div>
</template>

<script>
  import InputNumber from '../../atoms/form-controls/BaseInput';
  export default {
    components: {
      InputNumber
    },
    methods: {
      passValue: function (value) {
        this.$emit('input', value);
      }
    }
  };
</script>
  

И, наконец, BaseComponent:

 <template>
  <input
    :value="$attrs.value"
    type="number"
    inputmode="numeric"
    @input="$emit( 'input', $event )"
  />
</template>

<script>
  export default {
    data () {
      return {
        // myValue: undefined
      };
    }
  }
 };
</script>
  

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

1. Я использую здесь $attrs, лучше строго определять реквизиты. В BaseComponent вам не нужно сохранять состояние (myVakue). В событии @input событие $ — это ваше реальное значение, а не цель