Как мне скопировать V-модели: значение с: значение?

Я получаю другое поведение между использованием @input а также v-model, а также @input а также :value,

Что v-модель делает по-другому с: значением, которое я не получаю, только используя: значение?

Я создал пример в jsFiddle, который показывает разницу: верхнее поле ввода позволяет вводить только цифры, а нижнее - все, что нужно вводить.

Что мне нужно сделать, чтобы получить ту же функциональность, используя только @input а также :value?

1 ответ

Решение

Вы можете добиться этого, добавив ссылку на вход и обновив значение ввода через него. Проверьте здесь. https://jsfiddle.net/RiddhiParekh/nzfr0xy3/

Шаблон =>

    <div id="app">
  <div>
    <input @input="mask1" 
           v-model="message1" 
           type="text" 
           placeholder="Only numbers are allowed">
    <p>Message1 is: {{ message1 }}</p>
    <hr/>
    <input @input="mask2" 
           :value="message2"
           type="text"
           ref="myInput"
           placeholder="Try numbers">
    <p>Message2 is: {{ message2 }}</p>

  </div>
</div>

Скрипт =>

 new Vue({
  el: "#app",
  data: {
   message1: "",
   message2: ""
  },
  methods: {
    mask1(input){
        const validCharsForNumberFields = /[0-9]*(,|\.)?[0-9]*/gm
      this.message1 = input.target.value.match(validCharsForNumberFields)[0]
        },
    mask2(input){
      const validCharsForNumberFields = /[0-9]*(,|\.)?[0-9]*/gm
      console.log(input)
      this.$refs.myInput.value = input.target.value.match(validCharsForNumberFields)[0]
      this.message2 = this.$refs.myInput.value
    },

  }
})
Другие вопросы по тегам