当前位置:首页 > VUE

vue实现输入金额

2026-02-17 01:10:30VUE

Vue 实现金额输入功能

金额输入是常见的表单需求,通常需要处理格式化、校验和用户交互。以下是实现金额输入的几种方法:

方法一:使用 v-model 和计算属性

通过计算属性实现双向绑定和格式化显示:

<template>
  <input v-model="displayValue" @input="handleInput" />
</template>

<script>
export default {
  data() {
    return {
      amount: 0
    }
  },
  computed: {
    displayValue: {
      get() {
        return this.amount.toFixed(2)
      },
      set(value) {
        value = value.replace(/[^0-9.]/g, '')
        this.amount = parseFloat(value) || 0
      }
    }
  },
  methods: {
    handleInput(e) {
      this.displayValue = e.target.value
    }
  }
}
</script>

方法二:使用自定义指令

创建指令自动格式化输入:

Vue.directive('money', {
  bind(el, binding, vnode) {
    el.addEventListener('input', (e) => {
      let value = e.target.value.replace(/[^0-9.]/g, '')
      vnode.context[binding.expression] = parseFloat(value) || 0
      e.target.value = value ? parseFloat(value).toFixed(2) : ''
    })
  }
})

// 使用方式
<input v-money="amount" />

方法三:第三方库

使用 vue-currency-input 等专业库:

npm install vue-currency-input
import VueCurrencyInput from 'vue-currency-input'

Vue.use(VueCurrencyInput, {
  globalOptions: {
    currency: 'CNY',
    valueAsInteger: false
  }
})

// 模板中使用
<currency-input v-model="price" />

关键处理点

  • 过滤非数字字符:使用正则表达式移除非法输入
  • 小数点控制:限制只能输入一个小数点
  • 自动补零:在失去焦点时自动补全两位小数
  • 千分位分隔:可添加逗号分隔显示(需考虑国际化)

完整示例

结合表单验证的完整组件:

vue实现输入金额

<template>
  <div>
    <input 
      ref="input"
      v-model="displayValue"
      @blur="formatValue"
      @focus="unformatValue"
    />
    <p v-if="error" class="error">{{ error }}</p>
  </div>
</template>

<script>
export default {
  props: {
    value: {
      type: Number,
      default: 0
    }
  },
  data() {
    return {
      displayValue: '',
      error: ''
    }
  },
  watch: {
    value(newVal) {
      this.displayValue = this.format(newVal)
    }
  },
  mounted() {
    this.displayValue = this.format(this.value)
  },
  methods: {
    format(value) {
      return value.toLocaleString('zh-CN', {
        minimumFractionDigits: 2,
        maximumFractionDigits: 2
      })
    },
    unformatValue() {
      this.displayValue = this.displayValue.replace(/[^0-9.]/g, '')
    },
    formatValue() {
      const num = parseFloat(this.displayValue) || 0
      this.displayValue = this.format(num)
      this.$emit('input', num)
      this.validate(num)
    },
    validate(value) {
      this.error = value > 1000000 ? '金额不能超过100万' : ''
    }
  }
}
</script>

标签: 金额vue
分享给朋友:

相关文章

vue实现列表显示

vue实现列表显示

Vue 实现列表显示的方法 在 Vue 中实现列表显示通常使用 v-for 指令,结合数组或对象数据渲染动态列表。以下是几种常见的实现方式。 基本列表渲染 通过 v-for 指令遍历数组,动态生成列…

vue功能实现

vue功能实现

Vue 功能实现指南 Vue.js 是一个渐进式 JavaScript 框架,广泛用于构建用户界面。以下是 Vue 功能的常见实现方法。 数据绑定 Vue 的核心功能之一是数据绑定,通过 v-mod…

vue实现粘贴

vue实现粘贴

Vue 实现粘贴功能的方法 在 Vue 中实现粘贴功能通常涉及监听粘贴事件并处理剪贴板数据。以下是几种常见的实现方式: 监听原生粘贴事件 通过 @paste 指令或原生 addEventListen…

vue 实现表单

vue 实现表单

Vue 表单实现方法 Vue.js 提供了多种方式实现表单,包括双向数据绑定、表单验证和动态表单生成。以下是常见的实现方法: 基础表单绑定 使用 v-model 指令实现表单元素与数据的双向绑定:…

vue实现前端

vue实现前端

Vue 实现前端的核心方法与步骤 安装 Vue 项目 使用 Vue CLI 或 Vite 创建项目。Vue CLI 是传统构建工具,Vite 是新一代轻量级工具。 npm init vue@la…

vue实现dag

vue实现dag

Vue实现DAG(有向无环图) 在Vue中实现DAG(Directed Acyclic Graph,有向无环图)通常涉及数据结构的建模、可视化渲染以及交互逻辑处理。以下是关键实现步骤和示例代码: 数…