首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >v-text-field在键入后返回字符串,即使它的类型为number

v-text-field在键入后返回字符串,即使它的类型为number
EN

Stack Overflow用户
提问于 2019-07-31 00:01:01
回答 4查看 9K关注 0票数 8
代码语言:javascript
运行
复制
<VTextField
                :value="addOnStartingPrice"
                solo
                outline
                reverse
                append-icon="attach_money"
                type="number"
                min="0"
                step="any"
                @input="$emit('update:addOnStartingPrice', $event)"
              />

我有这样的东西。

问题1)一旦我更改了其中的数字或类型,它就正确地抛出了Numer值,但它的类型是String而不是number,因此类型检查失败。如何让它以type:number的形式返回值?

问题2) step="any" and min="0"到底是做什么的?我猜它们不能工作,因为我也能输入负数。

EN

回答 4

Stack Overflow用户

发布于 2019-07-31 00:20:19

实际上,vuetify返回字符串。作为一种解决办法,您可以使用number modifier.

代码语言:javascript
运行
复制
<v-text-field type="number" v-model.number="computedAddOnStartingPrice" />

你可以有一个像这样的计算属性:

代码语言:javascript
运行
复制
computed: {
  computedAddOnStartingPrice: {
    get () { return this.addOnStartingPrice },
    set (newVal) { this.$emit('update:addOnStartingPrice', newVal) }
  }
}

根据step属性读取Html input step

对于min属性,请阅读Html input min

您还可以使用vuetify rules检查用户是否输入了正数。示例:

代码语言:javascript
运行
复制
    <v-text-field
      type="number"   
      step="any"
      min="0"
      :rules="[numberRule]"
      v-model.number="computedAddOnStartingPrice"
    ></v-text-field>

The numberRule

代码语言:javascript
运行
复制
  data: () => ({
    //...
    numberRule: val => {
      if(val < 0) return 'Please enter a positive number'
      return true
    }
  })

See it in action

票数 18
EN

Stack Overflow用户

发布于 2019-07-31 02:17:18

只需在@input处理程序中转换为Number即可。

代码语言:javascript
运行
复制
<VTextField
  :value="addOnStartingPrice"
  solo
  outline
  reverse
  append-icon="attach_money"
  type="number"
  min="0"
  step="any"
  @input="$emit('update:addOnStartingPrice', Number($event))"
  />
票数 1
EN

Stack Overflow用户

发布于 2019-07-31 04:53:59

作为InputElements的value属性的issue lies here是string。

它在需要的时候获取casted

你可以做的一件事是通过扩展/覆盖来“修复”:

代码语言:javascript
运行
复制
import * as comps from "vuetify/es5/components";

...

const override = comps.VTextField.extend({
  onInput(e) {
    const target = e.target;
    if (this.type !== "number") this.internalValue = target.value;
    else {
      this.internalValue = target.valueAsNumber;
    }
    this.badInput = target.validity && target.validity.badInput;
  }
});
Vue.component('NewVTextField, override);

或者$emit(+$event)的“变通方法”,因为这似乎是intended路径。

但是我想你应该使用setter,getter方法--因为你也可以在setter中链接验证器

查看:@roli loli

计算:{ computedAddOnStartingPrice:{ get () { return this.addOnStartingPrice },set (newVal) { this.$emit('update:addOnStartingPrice',newVal) } }

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57275723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档