Vuejs устанавливает максимальную переменную для ввода числа

#javascript #html #vue.js

#javascript #HTML #vue.js

Вопрос:

У меня есть следующий скрипт vue js:

  <template>
    <div>
        <div v-if='cart.length > 0'>
            <h1>Your Cart</h1>
        <template>
            <fieldset v-for='product in cart'>
                <image :src='product.image'
                <h4>{{product.name}}</h4>
                <input type='number' :max='quantCheck'/>
                <h5>{{product.price}}</h5>
            </fieldset>
        </template>
        </div>
        <div v-else><h1>Your Cart Is Empty</h1></div>
        <br />
        <h5>Subtotal: </h5>
        <h5>Shipping: Free for a limited time!</h5>
        <h2>Total: </h2>
    </div>
    </template>
    <script>
    const apiURL = 'http://localhost:3000';
    import axios from 'axios';
    export default {
        data() {
            return {
                cart: [
                        {
                    id:"56461",
                    name:"lilly",
                    quantity: 2,
                    price: 30.10
                    }, {
                    id:"1253",
                    name:"wild",
                    quantity: 1,
                    price: 31.10
                    }
                    ]
                }
            },
        methods: {
                let quantCheck = this.cart.product.quantity

        }
        }
    </script>
  

Я не смог найти хороший способ заставить что-то подобное работать.

Количество является переменным, и я думаю, может быть, я мог бы создать функцию, которая проверяет число после каждого ввода и выдает ошибку, когда оно становится больше, но это не совсем цель.

В любом случае извините, если это глупый вопрос, но заранее спасибо за вашу помощь!

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

1. Если я правильно понимаю, вы хотите, чтобы покупатели имели возможность добавлять, скажем, 5 продуктов lilly и 10 продуктов wild? Будет ли это максимальное количество оставаться постоянным для всех продуктов или у каждого продукта будет свое собственное максимальное количество?

2. У каждого продукта было бы свое собственное количество в качестве реквизита. Приведенный ниже ответ действительно сработал. Спасибо

Ответ №1:

Вы можете использовать проверку формы HTML для ввода (тип =»число»):

 <input type='number' :max='product.quantity'/>
  

Если ввод больше max значения, то при отправке формы будет отображаться ошибка

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

1. Я чувствую себя глупо, я бы поклялся, что пробовал это, но, возможно, я делал корзину вместо продукта, я не помню. Спасибо, что сработало

2. бесполезно, поскольку пользователь все еще может вводить его непосредственно с клавиатуры

Ответ №2:

Я полагаю, что то, что вы хотите сделать, это ограничить количество элементов в <input type='number' :max='quantCheck'/> на основе quantity свойства элемента в вашем cart . Если это так, в вашем компоненте есть несколько вещей, которые можно улучшить.

Сначала выполняется привязка :max="quantityCheck" к вашему вводу. глядя на ваш компонент, вы определили quantityCheck в опции методы.

 methods: {
    let quantCheck = this.cart.product.quantity
}
  

Это неверно, нет объявления метода. Вам нужно будет ограничить количество символов, используя quantity свойство напрямую:

 new Vue({
  el: '#app',
  template: `
  <div>
    <fieldset v-for='product in cart'>
        <h4>{{product.name}}</h4>
        <input type='number' :max="product.quantity"/>
        <h5>{{product.price}}</h5>
    </fieldset>
  </div>`,
  data: () => ({
      cart: [
        {
          id: "56461",
          name: "lilly",
          quantity: 2,
          price: 30.10
        },
        {
          id: "1253",
          name: "wild",
          quantity: 1,
          price: 31.10
        }
      ]
    })
  });  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app"></div>  

Вышеуказанное работает, чтобы проверить это, введите значение, превышающее количество, и ввод должен выделиться на blur

Если вы хотите улучшить проверку, я бы предложил использовать Vee-Validate для простого способа проверки ваших входных данных.

Используя VeeValidate

 Vue.use(VeeValidate);

new Vue({
  el: '#app',
  template: `
      <div>
        <fieldset v-for='product in cart'>
            <h4>{{product.name}}</h4>
            <input v-validate="'max_value:' product.quantity" :name="product.name" type="number">
            <span v-if="errors.first(product.name)">Quantity cannot be more than {{product.quantity}}</span>
            <h5>{{product.price}}</h5>
        </fieldset>
      </div>`,
  data: () => ({
    cart: [{
        id: "56461",
        name: "lilly",
        quantity: 2,
        price: 30.10
      },
      {
        id: "1253",
        name: "wild",
        quantity: 1,
        price: 31.10
      }
    ]
  })
});  
 <script src="https://cdn.jsdelivr.net/npm/vee-validate@latest/dist/vee-validate.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app"></div>  

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

1. Я могу ввести количество>2, и ничего не происходит, и ссылка на vee-validate прерывается