Vue将input [type = number]转换为字符串值

时间:2018-04-10 08:13:25

标签: javascript vue.js

我遇到了问题,Vue将number类型的输入字段的值转换为字符串,我无法弄清楚原因。我正在遵循的指南不会遇到这个问题,并且正如预期的那样得到值作为数字。

vue docs声明,如果输入的类型是数字,Vue会将值转换为数字。

代码源自一个组件,但我将其调整为在JSFiddle中运行:https://jsfiddle.net/d5wLsnvp/3/

vertical-align:bottom;

数量值是问题。 它初始化为0,当我按下“购买”按钮时,控制台显示:

<template>
    <div class="col-sm-6 col-md-4">
        <div class="panel panel-success">
            <div class="panel-heading">
                <h3 class="panel-title">
                    {{ stock.name }}
                    <small>(Price: {{ stock.price }})</small>
                </h3>
            </div>
            <div class="panel-body">
                <div class="pull-left">
                    <input type="number" class="form-control" placeholder="Quantity" v-model="quantity"/>
                </div>
                <div class="pull-right">
                    <button class="btn btn-success" @click="buyStock">Buy</button>
                </div>
            </div>
        </div>
    </div>
</template>

<script>
    export default {
        props: ['stock'],
        data() {
            return {
                quantity: 0 // Init with 0 stays a number
            };
        },
        methods: {
            buyStock() {
                const order = {
                    stockId: this.stock.id,
                    stockPrice: this.stock.price,
                    quantity: this.quantity
                };
                console.log(order);
                this.quantity = 0; // Reset to 0 is a number
            }
        }
    }
</script>

但是只要我通过使用微调器或仅输入新值来更改值,控制台就会显示:

Object { stockId: 1, stockPrice: 110, quantity: 0 }

使用Firefox 59.0.2和Chrome 65.0.3325.181进行测试。两人都表示他们是最新的。我实际上也尝试在Microsoft Edge中使用相同的结果。

那我在这里错过了什么?为什么Vue没有将值转换为数字?

2 个答案:

答案 0 :(得分:34)

您需要使用.number modifier for v-model,如下所示:

<input v-model.number="quantity" type="number">

答案 1 :(得分:1)

将订单对象更改为:

            const order = {
                stockId: this.stock.id,
                stockPrice: this.stock.price,
                quantity: +this.quantity
            };

这会自动将字符串解析为数字。

通常,HTML输入中的数据是字符串。输入类型仅检查字段中是否提供了有效字符串。