как отключить V-модель ввода в Vue от мутации - PullRequest
0 голосов
/ 04 марта 2019

У меня есть код для вычисления количества монет из массива, этот код позволяет мне узнать, сколько я могу купить из таблицы с данным заказом, в коде orderSize изменяет порядок, чтобы достичь результата, но когда я помещаю область вводадля ручного ввода размера ордера, который приводит к изменению входного текста (если он превышает сумму первого элемента), я не хочу, чтобы текст изменялся.Я попытался добавить другую переменную, равную orderSize, но происходит то же самое.Что я должен сделать, чтобы предотвратить изменение входного текста.(Попробуйте ввести любое значение больше 100, текст изменится) (массив исходит из аутсорсинга, я не могу его контролировать) (Если я не изменю эту переменную, моя основная цель, вычисление количества монет, не может быть достигнута)

jsfiddle

new Vue({
  el: '#app',
  data: {
    orderSize : null,
  },
  computed: {
    calculateOrder () {
      var coinArray = [["100","1"],["200","2"],["300","3"],["400","4"], 
      ["500","5"],["600","6"]] ;
      var sum = 0
      var sum1 = 0
      var i= 0
      
      for (i = 0; i < coinArray.length; i++){
        if (coinArray[i][0]*coinArray[i][1] < this.orderSize) {
          sum1 += parseFloat(coinArray[i][1]);
          sum += coinArray[i][0]*coinArray[i][1];
          this.orderSize -= coinArray[i][0]*coinArray[i][1] ;        
        } else {
          return sum1+this.orderSize/parseFloat(coinArray[i][0]);
        }
      }
    },
  },
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
  <div id="app">
    <input v-model="orderSize" placeholder="Order $">
  <p>{{ calculateOrder }}</p>
</div>

1 Ответ

0 голосов
/ 04 марта 2019

Если я правильно читаю, проблема в том, что вы модифицируете orderSize с помощью -=, который будет отображаться на входе.

Если вы хотите избежать этого, то сначаласкопируйте значение orderSize в новую переменную, например:

// Copy the variable
let size = this.orderSize
for (...){
  if (...) {
    size -= coinArray[i][0]*coinArray[i][1];
  } else {
     return sum1+size/parseFloat(coinArray[i][0]);
  }

(я удалил несвязанный код и содержимое if / for для ясности).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...