Vue-尝试将值发射为数字,并在发射时获取字符串

时间:2019-07-22 21:12:57

标签: javascript vue.js components

目标是在值是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>

2 个答案:

答案 0 :(得分:0)

您似乎需要使用v-bind建立未假定为字符串的特定数据类型。 Here是Vue.js文档中有关道具的示例。

答案 1 :(得分:0)

制造v-model.number可以解决问题。感谢@BrandonPratt!