element输入框与显示数据价格格式化

5 篇文章 0 订阅
3 篇文章 0 订阅

输入框输入时格式化

<div>
    价格:
    <el-input
      placeholder="请输入价格"
      v-model.trim="input1"
      oninput="value=value.replace(/[^0-9.]/g,'')" // 限制输入,仅可输入数字与.,且首位必须为数字(即为价格的输入限制)
      @change='data=>input1=toPrice(data)' // 输入回车后,变为格式化数据
      clearable>
      <i slot="prefix" style="color: black;font-style:normal;line-height: 33px;"></i>
    </el-input>
  </div>

格式化数据:

export function toPrice (val, type) { // 值,符号
  if (val === null || val === undefined || val === '') {
    return '—';
  } else {
    var data = Number(val).toFixed(2).split('.');
    var data2 = data[0].split('').reverse().join('');
    var newData = '';
    if (parseInt((data2.length - 1) / 3) > 0) {
      var count = 0;
      do {
        newData = newData + data2.slice(count * 3, count * 3 + 3) + ',';
        count = count + 1;
      } while (parseInt((data2.length - 1) / 3) >= count);
    }
    if (type) {
      return type + newData.split('').reverse().join('').slice(1) + '.' + data[1];
    } else {
      return newData.split('').reverse().join('').slice(1) + '.' + data[1];
    }
  }
}

格式化结果:
¥23,455.39

输入框无法输入

在el-input组件中加入@input="change($event)",其中change方法内是change (e) {this.$forceUpdate(); }

显示价格格式化

法一:vue格式化包vue-text-format

  1. 安装vue-text-format, npm install vue-text-format
  2. 导入包
 import Vue from 'vue'
import format from 'vue-text-format';
Vue.use(format);
  1. 自定义指令v-format,v-format="'¥#,##0.00'"

例子:

<div v-format="'¥#,##0.00'">{{input1}}</div>

法二:管道过滤

fliter:{
toPrice1(value,type) {
        if (typeof (value) === 'undefined' || value === null || value === '' || value === undefined) {
          return '-';
        } else {
          	var data = Number(value).toFixed(2).split('.');
		    var data2 = data[0].split('').reverse().join('');
		    var newData = '';
		    if (parseInt((data2.length - 1) / 3) > 0) {
		      var count = 0;
		      do {
		        newData = newData + data2.slice(count * 3, count * 3 + 3) + ',';
		        count = count + 1;
		      } while (parseInt((data2.length - 1) / 3) >= count);
		    }
		    if (type) {
		      return type + newData.split('').reverse().join('').slice(1) + '.' + data[1];
		    } else {
		      return newData.split('').reverse().join('').slice(1) + '.' + data[1];
		    }
        }
}

例子:

<div>{{input1|toPrice1}}</div><div>{{toPrice1(input1)}}</div>
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值