Vue.js: Filter 过滤器

全局

<template>
  <div class="hello">
    <div id="app">
      <div>${{ msg | prompt("Peter", "Hello World!") }}</div>
      <div>{{ price | MoneyFormat }}</div>
      {{date|timeFormat('yyyy-mm-dd')}}
    </div>
  </div>
</template>
<script>
export default {
  name: "ceShi",
  data() {
    return {
      price: 88888888,
      date:new Date()
    };
  },
};
</script>

main.js

Vue.filter('prompt', function(value, arg1, arg2) {
  return value + ' ' + arg1 + ', ' + arg2;
});
Vue.filter('MoneyFormat', function(money) {
  if (money && money != null) {
    money = String(money);
    var left = money.split('.')[0], right = money.split('.')[1];
    right = right ? (right.length >= 2 ? '.' + right.substr(0, 2) : '.' + right + '0') : '.00';
    var temp = left.split('').reverse().join('').match(/(\d{1,3})/g);
    return (Number(money) < 0 ? '-' : '') + temp.join(',').split('').reverse().join('') + right;
  } else if (money === 0) { // 注意===在这里的使用,如果传入的money为0,if中会将其判定为boolean类型,故而要另外做===判断
    return '0.00';
  } else {
    return '';
  }
})

# OR
import filters from "./utlis/filters"
Object.keys(filters).forEach((key) => {
    Vue.filter(key, filters[key])
})
// filters.js
const prompt = (value, arg1, arg2) => {
    return value + ' ' + arg1 + ', ' + arg2;
}
/**
 * 过滤器千分位加两位小数
 * 格式:{{date| MoneyFormat}}
 */
const MoneyFormat = (money) => {
    if (money && money != null) {
        money = String(money);
        var left = money.split('.')[0],
            right = money.split('.')[1];
        right = right ? (right.length >= 2 ? '.' + right.substr(0, 2) : '.' + right + '0') : '.00';
        var temp = left.split('').reverse().join('').match(/(\d{1,3})/g);
        return (Number(money) < 0 ? '-' : '') + temp.join(',').split('').reverse().join('') + right;
    } else if (money === 0) { // 注意===在这里的使用,如果传入的money为0,if中会将其判定为boolean类型,故而要另外做===判断
        return '0.00';
    } else {
        return '';
    }
}
/**
 * 过滤器时间
 * 格式:{{date|timeFormat('yyyy-mm-dd')}}
 */
const timeFormat = (value, format) => {
    let date = new Date(value)
    let y = date.getFullYear()
    let m = date.getMonth() + 1
    let d = date.getDate()
    let h = date.getHours()
    let min = date.getMinutes()
    let s = date.getSeconds()
    let result = ''
    if (format === undefined) {
        result = `${y}-${m < 10 ? '0' + m : m}-${d < 10 ? '0' + d : d} ${
        h < 10 ? '0' + h : h
      }:${min < 10 ? '0' + min : min}:${s < 10 ? '0' + s : s}`
    }
    if (format === 'yyyy-mm-dd') {
        result = `${y}-${m < 10 ? '0' + m : m}-${d < 10 ? '0' + d : d}`
    }
    if (format === 'yyyy-mm') {
        result = `${y}-${m < 10 ? '0' + m : m}`
    }
    if (format === 'mm-dd') {
        result = ` ${m < 10 ? '0' + m : m}:${d < 10 ? '0' + d : d}`
    }
    if (format === 'hh:mm') {
        result = ` ${h < 10 ? '0' + h : h}:${min < 10 ? '0' + min : min}`
    }
    if (format === 'yyyy') {
        result = `${y}`
    }
    if (format === 'yyyy-mm-dd h:min:s') {
        result = `${y}-${m < 10 ? '0' + m : m}-${d < 10 ? '0' + d : d} ${h < 10 ? '0' + h : h}:${min < 10 ? '0' + min : min}:${s < 10 ? '0' + s : s}`
    }
    if (format === 'yyyy.mm.dd') {
        result = `${y}.${m < 10 ? '0' + m : m}.${d < 10 ? '0' + d : d}`
    }
    return result
}
export default {
    prompt,
    MoneyFormat,
    timeFormat
}

组件内

<template>
  <div class="hello">
    <div id="app">
      <div>${{ price | commaFormat| priceFormat }}</div>
    </div>
  </div>
</template>
<script>
export default {
  name: "ceShi",
  filters:{
    priceFormat: function (value)  {
      // 加上 $ 字號
      return "$" + value;
    },
    commaFormat:function (value) {
      // 加上千分位符號
      return value
        .toString()
        .replace(
          /^(-?\d+?)((?:\d{3})+)(?=\.\d+$|$)/,
          function (all, pre, groupOf3Digital) {
            return pre + groupOf3Digital.replace(/\d{3}/g, ",$&");
          }
        );
    },
  },
  data() {
    return {
      price: 88888888,
    };
  },
};
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端全栈分享站

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值