当前位置:首页 > 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组件的d…

vue交互实现

vue交互实现

Vue 交互实现方法 Vue.js 提供了多种方式实现用户交互,包括事件处理、表单绑定、动态渲染等。以下是常见的交互实现方法: 事件处理 通过 v-on 或 @ 指令绑定事件,触发方法或直接执行表达…

vue 实现闪烁

vue 实现闪烁

Vue 实现闪烁效果的方法 方法一:使用 CSS 动画 在 Vue 组件中定义一个闪烁的 CSS 动画,通过绑定 class 或 style 来控制元素的闪烁效果。 <template>…

vue实现换行

vue实现换行

Vue 中实现换行的几种方法 在 Vue 中实现换行可以通过多种方式,具体取决于使用场景和需求。以下是常见的几种方法: 使用 HTML 的 <br> 标签 在模板中直接使用 <br…

vue 实现注册

vue 实现注册

Vue 实现注册功能 注册功能通常包括表单验证、数据提交和用户反馈。以下是实现注册功能的步骤: 1. 创建注册表单组件 在 Vue 项目中创建一个注册表单组件,包含用户名、邮箱、密码等输入字段。…

vue底层实现

vue底层实现

Vue.js 的底层实现原理 Vue.js 是一个渐进式 JavaScript 框架,其核心实现主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是其关键实现细节: 响应式系统 Vue 2…