javascript - Vue 模型绑定(bind)为数字

标签 javascript typescript vue.js

我在输入框上使用v-model,我想使用数字进行绑定(bind),但它似乎不起作用。当我使用输入框时发生的情况是将项目保存为字符串,我知道这一点是因为当我执行 myModel += 25 时,而不是 100 去到125,它会转到10025

是否可以将输入绑定(bind)为数字?

这就是我的输入元素的样子:

    <input type="text" list="zoom-amount" v-model="project.zoom" />
    <datalist id="zoom-amount">
      <option>25</option>
      <option>50</option>
      <option>100</option>
      <option>150</option>
      <option>200</option>
    </datalist>
@Component
export default class WorkspaceStatusBar extends Vue {
  @Provide() public project: Project = this.activeProject

  public get activeProject() {
    return this.$store.getters['project/getActiveProject']
  }

  @Watch('activeProject')
  public onActiveProjectChanged(newProject: Project) {
    this.project = newProject
  }

}

最佳答案

我不知道 Typescript/基于类的 API(所以你可能需要翻译一点),但一种方法是使用 computed property with both getter and setter其中setter处理数字的转换

computed: {
  zoom: {
    get () {
      return this.project.zoom
    },
    set (zoom) {
      this.project.zoom = Number(zoom) // or parseInt(zoom, 10)
      // you can even commit / dispatch here, ie
      // this.$store.commit(...)
    }
  }
}

并将您的输入绑定(bind)到计算属性

<input v-model="zoom" list="zoom-amount">
<小时/>

这就是我认为的类样式组件的样子。可能是错的,但你明白了

public get zoom (): string {
  return this.project.zoom.toString()
}

public set zoom (zoom: string) {
  this.project.zoom = Number(zoom)
}

关于javascript - Vue 模型绑定(bind)为数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59044396/

相关文章:

javascript - 当 @types/any 只是一个 stub 类型定义时,如何正确处理它?

typescript - 从未定义的值中过滤数组

vue.js - 如何在 vue js 上的循环(超过 1 个循环)完成后调用方法?

javascript - 第三(和更大)嵌套范围的 JS 范围约定

javascript - jQuery : Submit event not firing on FireFox

javascript - 如何打开链接并将其包含在 div 中

javascript - className 在 VueJS 方法中不起作用

webpack - 将 JSON 导入 VueJS

javascript - 如何在 css 样式上添加 SVG 行

javascript - Angular - 从函数返回promise.then