当前位置:首页 > 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实现输入金额

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

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 等专业库:

vue实现输入金额

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

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

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

关键处理点

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

完整示例

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

<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组件的data中定义好友列表数据,通常是一个数组对象,每个对象包含好友的基本信息如ID、头像、昵称等。 data() { return { f…

vue穿梭框组件实现

vue穿梭框组件实现

实现基础穿梭框组件 在Vue中实现穿梭框组件,可以使用<el-transfer>(Element UI)或手动实现。以下是手动实现的核心逻辑: <template> &l…

vue 实现

vue 实现

Vue 实现的基本步骤 安装 Vue.js 可以通过 npm 或 CDN 引入。使用 npm 安装适合大型项目,CDN 适合快速原型开发。 npm install vue 在 HTML 文件中引入…

vue实现边框

vue实现边框

Vue 实现边框的方法 在 Vue 中实现边框效果可以通过多种方式完成,包括内联样式、CSS 类绑定、动态样式以及使用第三方 UI 库。以下是几种常见的实现方法。 内联样式绑定 使用 Vue 的 :…

vue实现旋转

vue实现旋转

Vue 实现旋转效果的方法 在 Vue 中实现旋转效果可以通过多种方式完成,以下是几种常见的方法: 使用 CSS 动画 通过 Vue 的 :class 或 :style 绑定 CSS 动画实现旋转效…

vue实现主题

vue实现主题

Vue 实现主题的方法 使用 CSS 变量动态切换主题 定义全局 CSS 变量,通过修改这些变量实现主题切换。在 Vue 的根组件或全局样式中定义变量: :root { --primary-co…