我有以下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>
我一直无法找到一种好的方法来完成类似的工作。
数量是可变的,我想也许我可以创建一个函数来检查每个输入后的数字,并在数字超过该数字时弹出错误,但这并不是目标。
如果这是一个愚蠢的问题,无论如何,对不起,但是请提前感谢您的帮助!
答案 0 :(得分:4)
您可以将HTML表单验证用于输入(类型=“数字”):
<input type='number' :max='product.quantity'/>
如果输入的值大于max
,则它将在提交表单时显示错误
答案 1 :(得分:0)
我相信您要做的是根据<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>