目标是在值是1-10时有一个选择框,在数字输入字段是+10时有一个选择框,如代码中所示,有一个最小和最大限制。
使用select更改值可以正常工作,并且不会返回错误,但是,在字段上更改值时,它会返回一个字符串。
还尝试使数字不能小于1,但是在我添加负数后该字段消失了
<template>
<div id="app">
<QuantityInput
v-on:qtyChange="updateQty($event)"
:value="input"
:selectMin="1"
:selectMax="20"
/>
<p>Quantity Selected: {{ input }}</p>
</div>
</template>
<script>
import QuantityInput from "@/components/QuantityInput";
export default {
name: "App",
components: {
QuantityInput
},
data() {
return { input: 1 };
},
methods: {
updateQty(qty) {
this.input < 1 ? (this.input = 1) : (this.input = qty);
}
}
};
</script>
QuantityInput组件
<template>
<select v-if="qty < 10" v-model="qty" @change="$emit('qtyChange', qty)">
<option :value="1">1</option>
<option :value="2">2</option>
<option :value="3">3</option>
<option :value="4">4</option>
<option :value="5">5</option>
<option :value="6">6</option>
<option :value="7">7</option>
<option :value="8">8</option>
<option :value="9">9</option>
<option :value="10">10+</option>
</select>
<input
v-else
type="number"
:min="selectMin"
:max="selectMax"
v-model="qty"
@change="$emit('qtyChange', qty)"
/>
</template>
<script>
export default {
name: "QuantityInput",
props: {
value: Number,
selectMin: Number,
selectMax: Number
},
data() {
return { qty: this.value };
}
};
</script>
答案 0 :(得分:0)
您似乎需要使用v-bind建立未假定为字符串的特定数据类型。 Here是Vue.js文档中有关道具的示例。
答案 1 :(得分:0)
制造v-model.number
可以解决问题。感谢@BrandonPratt!