概念:Vue.js 允许你自定义过滤器,可被用作一些常见的文本格式化。过滤器可以用在两个地方:mustache 插值和 v-bind 表达式。过滤器应该被添加在 JavaScript 表达式的尾部,由“管道”符指示;
https://cn.vuejs.org/v2/guide/filters.html#ad
| 第一个命令的输出作为第二个命令的输入过滤器可以用在两个地方:双花括号插值和 v-bind 表达式
<!-- 在双花括号中 -->{{ message | capitalize }}<!-- 在 `v-bind` 中 --><div v-bind:id="rawId | formatId"></div>
全局过滤器的定义
// 过滤器的定义语法Vue.filter('过滤器的名称', function(){})// 过滤器中的 function ,第一个参数,已经被规定死了,永远都是 过滤器 管道符前面 传递过来的数据Vue.filter('过滤器的名称', (data)=>{return data + '123';})
过滤器的使用示例
<div id="app"><!-- 格式化为年月日 --><p>{{ new Date() | dateFormat() }}</p><!-- 给金额前加上¥货币符号 --><p>{{ 399 | moneyFormat }}</p><p>{{ 399 | moneyFormat('$')}}</p><!-- 敏感词过滤 将其中单纯替换为** --><p>{{ '曾经,我也是一个单纯的少年,单纯的我,傻傻的问,谁是世界上最单纯的男人!' | msgFormat('--') }}</p></div>
Vue.filter定义全局过滤器
// 时间过滤器Vue.filter('dateFormat', (data) => {const date = new Date(data)// 获取年月日const year = date.getFullYear()const month = date.getMonth()const day = date.getDate()return `${year} 年 ${month} 月 ${day} 日`});// 金额过滤器Vue.filter('moneyFormat',(data,sign="¥")=>{return sign+data;});// 过滤单纯敏感词Vue.filter('msgFormat', function(data, arg = "***") {return data.replace(/单纯/g, arg);});

HTML元素:
<div id="app"><p>{{ new Date() | dataFormat}}</p> <!-- 2021-05-05 18:26:25 --><p>{{ new Date() | dataFormat('yyyy-mm-dd')}}</p> <!-- 2021-05-05 --></div>
私有过滤器 filters 定义方式:
// 全局过滤器Vue.filter('dateFormat', (data) => {const date = new Date(data)// 获取年月日const year = date.getFullYear()const month = date.getMonth()const day = date.getDate()return `${year} 年 ${month} 月 ${day} 日~~`});var vm = new Vue({el: '#app',data: {},methods: {},filters: { // 私有局部过滤器,只能在 当前 VM 对象所控制的 View 区域进行使用dataFormat(input, pattern = "") { // 在参数列表中 通过 pattern="" 来指定形参默认值,防止报错var dt = new Date(input);// 获取年月日var y = dt.getFullYear();var m = (dt.getMonth() + 1).toString().padStart(2, '0');var d = dt.getDate().toString().padStart(2, '0');// 如果 传递进来的字符串类型,转为小写之后,等于 yyyy-mm-dd,那么就返回 年-月-日// 否则,就返回 年-月-日 时:分:秒if (pattern.toLowerCase() === 'yyyy-mm-dd') {return `${y}-${m}-${d}`;} else {// 获取时分秒var hh = dt.getHours().toString().padStart(2, '0');var mm = dt.getMinutes().toString().padStart(2, '0');var ss = dt.getSeconds().toString().padStart(2, '0');return `${y}-${m}-${d} ${hh}:${mm}:${ss}`;}}}});// 使用ES6中的字符串新方法 String.prototype.padStart(maxLength, fillString='') 或 String.prototype.padEnd(maxLength, fillString='')来填充字符串长度;
注意:当有局部和全局两个名称相同的过滤器时候,会以就近原则进行调用,即:局部过滤器优先于全局过滤器被调用!
过滤器可以串联多个,前一个过滤器的返回值作为后一个的参数
给定一个状态 status ,值为 1、2、3
1:待付款 2:待发货 3:待收货
分别设置:红色、灰色、绿色
<style>.no-pay {background-color: #ccc;padding: 10px;}.no-shipments {background-color: orange;padding: 10px;}.yes-shipments {background-color: green;padding: 10px;}.take-delivery {background-color: red;padding: 10px;}</style><div id="app"><span v-bind:class="1 | getStatus | setStatusColor">{{ 1 | getStatus }}</span><span v-bind:class="2 | getStatus | setStatusColor">{{ 2 | getStatus }}</span><span v-bind:class="3 | getStatus | setStatusColor">{{ 3 | getStatus }}</span><span v-bind:class="4 | getStatus | setStatusColor">{{ 4 | getStatus }}</span></div>
filters定义局部过滤器
filters: {// 判断是什么状态getStatus(data) {switch(data) {case 1:return '待付款'case 2:return '待发货'case 3:return '已发货'case 4:return '待收货'}},// 设置状态文字颜色setStatusColor(data) {switch(data) {case '待付款':return 'no-pay'case '待发货':return 'no-shipments'case '已发货':return 'yes-shipments'case '待收货':return 'take-delivery'}}}

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号