0

0

Vue.js 自定义过滤器

高洛峰

高洛峰

发布时间:2016-11-23 17:21:28

|

1507人浏览过

|

来源于php中文网

原创

过滤器,本质上就是一个函数。其作用在于用户输入数据后,它能够进行处理,并返回一个数据结果。

Vue.js 与 AngularJS 中的过滤器语法有些相似,使用管道符(|)进行连接,代码示例如下:

{{'abc' | uppercase}}    'abc' => 'ABC'

这里使用了Vue.js 内置的过滤器 uppercase,将字符串中的字母全部转换成大写形式。

Vue.js 支持在任何出现表达式的地方添加过滤器,除了上面例子中的 双大括号 表达式之外,还可以在绑定指令的表达式后调用,代码示例如下:

渲染为: =>  HELLO WORLD!

立即学习前端免费学习笔记(深入)”;

Vue 2.x 中,过滤器只能在 mustache 绑定中使用。为了在指令绑定中实现同样的行为,你应该使用计算属性。

过滤器可以串联:

{{ message | filterA | filterB }}

   

这里可以看一个例子:

{{'ABCDE' |lowercase | capitalize }}

   

lowercase 过滤器:把数据变成小写形式

capitalize过滤器:把首字母变成大写形式

// 'ABCDE' -> 'abcde' -> 'Abcde'

过滤器可以接受参数,参数跟在过滤器名称后面,参数之间以空格分隔。代码示例如下:

{{ message | filterA('arg1', arg2) }}

   

过滤器函数将始终以表达式的值作为第一个参数,带引号的参数会被当作字符串处理,而不带引号的参数会被当作数据属性名来处理。

这里的 message 将作为第一个参数,字符串arg1 作为第二个参数,表达式 arg2 的值在计算出来以后作为第三个参数传给过滤器。同时,Vue.js 的过滤器支持链式调用,上一个过滤器的输出结果可以作为下一个过滤器的输入

内置过滤器

1、字母操作

Vue.js 内置了 capitalize、uppercase、lowercase 三个过滤器用于处理英文字符。注意:这三个过滤器仅针对英文字符串使用

1-1、capitalize

capitalize 过滤器用于将表达式中的首字母转换为大写形式

{{'abc' | capitalize}}  // 'abc' => 'Abc'

   

1-2、uppercase

uppercase 过滤器用于将表达式中的所有字母转换为大写形式

{{'abc' | uppercase}}  // 'abc' => 'ABC'

   

1-3、lowercase

lowercase 过滤器用于将表达式中的所有字母转换为小写形式

{{'ABC' | lowercase}}  // 'ABC' => 'abc'

   

2、限制

Vue.js 中内置了 limitBy、filterBy、orderBy 三个过滤器用于处理并返回过滤后的数组,比如与v-for搭配使用。

注意:这三个过滤器所处理的表达式的值必须是数组,否则程序会报错

2-1、limitBy

limitBy 过滤器的作用是限制数组为开始前的 N 个元素,其中,N 由传入的第一个参数指定,表示限制几个,默认为 0, 即取全部的元素。第二个参数可选,用于指定从哪开始,比如:第一个参数是4,第二个参数是5,则表示取4个元素,从下标为5的元素开始。代码示例如下:

  • {{item}}

    

  • {{item}}

    

  • {{item}}

   

还可以这么使用:

  • {{item}}

   

2-2、filterBy

filterBy过滤器的使用比较灵活,其第一个参数可以是字符串或者函数,过滤条件是:'string || function' + in + 'optionKeyName'

如果第一个参数是字符串,那么将在每个数组元素中搜索它,并返回包含该字符串的元素组成的数组。代码示例如下:

  • {{val}}

   

如果数组元素是一个对象,过滤器将递归地在它所有属性中搜索。为了缩小搜索范围,可以指定一个搜索字段。代码示例如下:

  • {{user.uname}}

wKioL1g1FQKRNt6DAAAEXizhf1w010.pngwKioL1g1FQKRNt6DAAAEXizhf1w010.png

如果 filterBy 的第一个参数是函数,则过滤器将根据函数的返回结果进行过滤。此时 filterBy过滤器将调用 Javascript 数组中内置的函数 filter() 对数组进行处理,待过滤数组中的每个元素都将作为参数输入并执行传入 filterBy 中的函数。

只有函数返回结果为 true的数组元素才符合条件并将存入一个新的数组,最终返回结果即为这个新的数组。

2-3、orderBy

 orderBy 过滤器的作用是返回排序后的数组。过滤条件是:'string || array || function' + 'order>=0 为升序 || order

第一个参数可以是字符串、数组或者函数,第二个参数order可选,决定结果为升序或降序排列,默认为1,即升序排列

若输入参数为字符串,则可同时传入多个字符串作为排序键名,字符串之间以空格分隔。代码示例如下:

  • {{user.lastName}} {{user.firstName}} {{user.age}}

此时,将按照传入的排序键名的先后顺序进行排序。也可以将排序键名按照顺序放入一个数组中,然后传入一个数组参数给 orderBy 过滤器即可。代码示例如下:


  • {{user.lastName}} {{user.firstName}} {{user.age}}

    升序排列:

  • {{val}}

wKioL1g1FQKRNt6DAAAEXizhf1w010.png

降序排列:

  • {{val}}

   wKioL1g1FQKRNt6DAAAEXizhf1w010.png

Timebolt
Timebolt

视频静态过滤器,可以快速自动删除沉默镜头

下载

3、json 过滤器

Vue.js 中的 json 过滤器本质上是 JSON.stringify() 的精简缩略版,可将表达式的值转换为 JSON 字符串,即输出表达式经过 JSON.stringify() 处理后的结果。

json 可接受一个类型为 Number 的参数,用于决定转换后的 JSON 字符串的缩进距离,如果不输入该参数,则默认为2。

不输入参数,默认为2的示例:

{{information | json}}

wKioL1g1FQKRNt6DAAAEXizhf1w010.png

为了看到效果,我们输入一个参数20:

{{information | json 20}}

wKioL1g1FQKRNt6DAAAEXizhf1w010.png

4、currency 过滤器

currency 过滤器的作用是将数字值转换为货币形式输出。

第一个参数接受类型为 String 的货币符号,如果不输入,则默认为美元符号$。

第二个参数接受类型为 Number的小数位,如果不输入,则默认为2.

注意:如果第一个参数采取默认形式,而需要第二个参数修改小数位,则第一个参数不可省略

不输入参数,默认形式

{{amount | currency}}

wKioL1g1FQKRNt6DAAAEXizhf1w010.png

使用其它货币符号:

{{amount | currency '¥'}}

wKioL1g1FQKRNt6DAAAEXizhf1w010.png

将小数调整为3位:

{{amount | currency '¥' 3}}

wKioL1g1FQKRNt6DAAAEXizhf1w010.png

5、debounce 过滤器

debounce 过滤器的作用是延迟处理一定的时间执行。其接受的表达式的值必须是函数,因此,一般与 v-on 等指令结合使用。

debounce 接受一个可选的参数作为延迟时间,单位为毫秒。如果没有该参数,则默认的延迟时间为300ms,经过 debounce 包装的处理器在调用之后将至少延迟设定的时间再执行。 如果在延迟结束前再次调用,则延迟时长将重置为设定的时间。

通常,在监听用户 input 事件时使用 debounce 过滤器比较有用,可以防止频繁调用方法。debounce 的用法参考如下:

自定义过滤器

1、filter语法

在Vue.js 中也存在一个全局函数 Vue.filter 用于构造过滤器:

Vue.filter(filterName, function(input){...})

该函数接受两个参数,第一个参数为自定义的过滤器名称,第二个参数则是具体的过滤器函数,过滤器函数以值为参数,返回转换后的值

2、单个参数

注册一个名为 reverse 的过滤器,作用是将字符串反转输出。代码示例如下:

{{message}}

wKioL1g1FQKRNt6DAAAEXizhf1w010.png

注册一个名为 double 的过滤器,作用是将数字补全成两位数输出。代码示例如下

{{value}}

wKioL1g1FQKRNt6DAAAEXizhf1w010.png

注册一个名为 date 的过滤器,作用是将当前时间毫秒数以年月日时分秒的格式输出。代码示例如下:

{{message}}

wKioL1g1FQKRNt6DAAAEXizhf1w010.png

3、多个参数

过滤器函数除了以值作为参数外,也可以接受任意数量的参数,参数之间以空格分隔。代码示例如下:

{{message}}

   wKioL1g1FQKRNt6DAAAEXizhf1w010.png

4、双向过滤器

上面的过滤器都是在 Model 数据输出到 View 层之前进行数据转化的,实际上 Vue.js 还支持把来自视图(input元素)的值在写回模型前进行转化,即双向过滤器

   
Vue.filter('filterName',{
    //model ---> view
    //read 函数可选
    read:function(val){
        ...
    },
     
    //view ---> model
    //write 函数将在数据被写入Model 之前调用
    //两个参数分别为表达式的新值和旧值
    write:function(newVal, oldVal){
        ...
    }
})

   

代码示例如下:

{{message}}

    在初始情况下,message 表达式的值经过 twoWayFilter 中的 read 函数处理,输出到 view 层

wKioL1g1FQKRNt6DAAAEXizhf1w010.png

当我们在 input 框中修改 message 的值时,twoWayFilter 中的 write 函数将在数据输出到 Model 层之前处理,这里将返回 message 的旧值 + 'write',然后输出到 Model层,因此 message的值变更为'hello world write' 并显示到页面上

wKioL1g1FQKRNt6DAAAEXizhf1w010.png

常见问题解析

1、filterBy/orderBy 过滤后 $index 的索引

在使用 filterBy 或者 orderBy 对表达式进行过滤时,如果同时需要将 $index 作为参数,此时的 $index将会根据表达式数组或对象过滤后的值进行索引

  • {{item.name}} - {{$index}}

   

2、自定义filter 的书写位置

自定义 filter 可以写在全局 Vue下,例如:

Vue.filter('reverse',function(message){
        return message.split('').reverse().join('');
    });

   

也可以写在Vue 实例当中,例如:

var vm = new Vue({
    el:'#example',
    data:{
         
    },
    filters:{
        //自定义 filter 事件的位置
        reverse:function(value){
            return value.split('').reverse().join('');
        }
    }
})

   

二者本质上并无区别,可任选一种使用。但是,采用Vue.filter 在全局定义时,需要在实例化 Vue 之前定义,否则自定义的 filter 不起作用

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

178

2026.01.28

包子漫画在线官方入口大全
包子漫画在线官方入口大全

本合集汇总了包子漫画2026最新官方在线观看入口,涵盖备用域名、正版无广告链接及多端适配地址,助你畅享12700+高清漫画资源。阅读专题下面的文章了解更多详细内容。

35

2026.01.28

ao3中文版官网地址大全
ao3中文版官网地址大全

AO3最新中文版官网入口合集,汇总2026年主站及国内优化镜像链接,支持简体中文界面、无广告阅读与多设备同步。阅读专题下面的文章了解更多详细内容。

79

2026.01.28

php怎么写接口教程
php怎么写接口教程

本合集涵盖PHP接口开发基础、RESTful API设计、数据交互与安全处理等实用教程,助你快速掌握PHP接口编写技巧。阅读专题下面的文章了解更多详细内容。

2

2026.01.28

php中文乱码如何解决
php中文乱码如何解决

本文整理了php中文乱码如何解决及解决方法,阅读节专题下面的文章了解更多详细内容。

4

2026.01.28

Java 消息队列与异步架构实战
Java 消息队列与异步架构实战

本专题系统讲解 Java 在消息队列与异步系统架构中的核心应用,涵盖消息队列基本原理、Kafka 与 RabbitMQ 的使用场景对比、生产者与消费者模型、消息可靠性与顺序性保障、重复消费与幂等处理,以及在高并发系统中的异步解耦设计。通过实战案例,帮助学习者掌握 使用 Java 构建高吞吐、高可靠异步消息系统的完整思路。

8

2026.01.28

Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

24

2026.01.27

拼多多赚钱的5种方法 拼多多赚钱的5种方法
拼多多赚钱的5种方法 拼多多赚钱的5种方法

在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

122

2026.01.26

edge浏览器怎样设置主页 edge浏览器自定义设置教程
edge浏览器怎样设置主页 edge浏览器自定义设置教程

在Edge浏览器中设置主页,请依次点击右上角“...”图标 > 设置 > 开始、主页和新建标签页。在“Microsoft Edge 启动时”选择“打开以下页面”,点击“添加新页面”并输入网址。若要使用主页按钮,需在“外观”设置中开启“显示主页按钮”并设定网址。

72

2026.01.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Vue 教程
Vue 教程

共42课时 | 7.3万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.0万人学习

Vue.js 微实战--十天技能课堂
Vue.js 微实战--十天技能课堂

共18课时 | 1.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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