第十四节:带你梳理Vue2:filters过滤器

过滤器是什么?

过滤器是一种在模板中处理数据的便捷方式, 会经常在其他模板语言中见到, 他们特别适合对字符串和数字进行简单的显示变化.


1. 通过案例理解过滤器

示例: 对于数字价格处理

1.1 Mastache语法中处理价格数字

<div id="app"><!-- 正常处理 --><p>苹果价格:{{ (priceOne/100).toFixed(2) }} 元/斤</p><p>梨子价格:{{ (priceTwo/100).toFixed(2) }} 元/斤</p><p>香蕉价格:{{ (priceThree/100).toFixed(2) }} 元/斤</p></div><script>   const vm = new Vue({el: "#app",data: {priceOne: 2312,priceTwo: 1825,priceThree: 1634,}})
</script>

我们就会发现一件事情, 同样的逻辑我们要处理三次,这种处理方案,页面需要使用到多少次价格,我们就需要处理多少次相同的逻辑


我们在回顾到目前为止我们所学的知识, 有什么方方案可以很好的将逻辑抽离出来吗, 计算属性和侦听器显然不合适,因为都需要检测依赖数据的变化, 有多少数据就需要多少的计算属性,和多少的侦听器, 反而不美

想来想去,定义一个方法通过接受不同的参数来处理我们的相同的逻辑,每次只要调用这个方法就可以了,挺不错的, 尝试一下


1.2 方法处理相同逻辑

<div id="app"><!--  使用方法处理价格 --><p>苹果价格:{{ priceHandle(priceOne)}} 元/斤</p><p>梨子价格:{{ priceHandle(priceTwo)}} 元/斤</p><p>香蕉价格:{{ priceHandle(priceThree)}} 元/斤</p></div><script>   const vm = new Vue({el: "#app",data: {priceOne: 2312,priceTwo: 1825,priceThree: 1634,},methods:{priceHandle(price){return (price/100).toFixed(2)}}})
</script>

方法也有不美之处,就是寓意化不够明确,所有的事情都需要定义方法来处理, 那么方法的耦合性就会很高

所以对于数据的先期处理, vue给我们提供了过滤器 filters


1.3 使用filters 过滤器处理数据

注意过滤器的方法定义在filters属性中

<div id="app"><!-- 过滤器 filter --><p>苹果价格:{{ priceOne | formatPrice}} 元/斤</p><p>梨子价格:{{ priceTwo | formatPrice }} 元/斤</p><p>香蕉价格:{{ priceThree | formatPrice }} 元/斤</p></div><script>   const vm = new Vue({el: "#app",data: {priceOne: 2312,priceTwo: 1825,priceThree: 1634,},filters:{formatPrice(price){return (price/100).toFixed(2)}}})
</script>

其实这个时候,我们甚至连后面的`元/斤` 都可以处理到过滤器中
<div id="app"><!-- 过滤器 filter --><p>苹果价格:{{ priceOne | formatPrice}} </p><p>梨子价格:{{ priceTwo | formatPrice }} </p><p>香蕉价格:{{ priceThree | formatPrice }} </p></div><script>   const vm = new Vue({el: "#app",data: {priceOne: 2312,priceTwo: 1825,priceThree: 1634,},filters:{formatPrice(price){return "¥"+(price/100).toFixed(2) +'元/斤'}}})</script>

这样的好处很多, 代码重复更少, 可读性更强, 同时呢,维护性也更好, 如果要更改逻辑,只需要修改一次,而不是每个使用的地方都修改


2. 过滤器传参

通过案例,我们也了解了, 过滤器在使用时会将|前面的内容作为过滤器函数的第一个参数,如果过滤器只需要这一个参数时, 过滤器本身不需要加括号

如果过滤器需要其他参数来动态改变逻辑怎么办,

这个时候过滤器在使用的时候就可以加括号执行,并传入相应的参数,输入的参数会作为第二个参数传递给过滤器

例如:

<div id="app"><!-- 过滤器传参 --><p>苹果价格:{{ priceOne | formatPrice("¥")}} </p><p>梨子价格:{{ priceTwo | formatPrice("$") }} </p><p>香蕉价格:{{ priceThree | formatPrice("$") }} </p></div><script>   const vm = new Vue({el: "#app",data: {priceOne: 2312,priceTwo: 1825,priceThree: 1634,},filters:{formatPrice(price,symbol){return symbol+(price/100).toFixed(2) +'元/斤'}}})</script>

这样我们就可以通过传参的方式来动态的改变过滤逻辑


3. 链式调用过滤器

过滤器还可以通过链式调用的方式在一个表达式中使用多个过滤器.

比如我们给刚才的案例添加一个四舍五入到整数的过滤器

<div id="app"><!-- 链式调用过滤器 --><p>苹果价格:{{ priceOne | roundPrice | formatPrice("¥")}} </p><p>梨子价格:{{ priceTwo | roundPrice | formatPrice("$") }} </p><p>香蕉价格:{{ priceThree | roundPrice  | formatPrice("$") }} </p></div><script>   const vm = new Vue({el: "#app",data: {priceOne: 2312,priceTwo: 1825,priceThree: 1634,},filters:{roundPrice(price){return Math.round(price/100);},formatPrice(price,symbol){return symbol+price.toFixed(2) +'元/斤'}}})</script>

这里首先会调用roundPrice 过滤器, 会将价格传入到这个过滤器中处理, 然后在将处理后的结果传给第二个过滤器处理,最后输出到页面上


4. 属性使用过滤器

除了在插值,还可以在v-bind中使用过滤器,因为使用了v-bind动态绑定的属性,属性值已经不再是一个字符串,而是一个表达式了

<div id="app"><!-- 动态绑定的属性使用过滤器 --><input type="text" :value="priceOne | roundPrice | formatPrice('¥')">
</div><script>   const vm = new Vue({el: "#app",data: {priceOne: 2312,priceTwo: 1825,priceThree: 1634,},filters:{roundPrice(price){return Math.round(price/100);},formatPrice(price,symbol){return symbol+price.toFixed(2) +'元/斤'}}})</script>

5. 还可以通过Vue构造函数注册全局过滤器

也就是说现在的过滤器是一个组件级的过滤器

如果我重新new 一个Vue实例, 这个过滤器将不能在另一个实例上使用

示例

<div id="app"><p>苹果价格:{{ priceOne | roundPrice | formatPrice("¥")}} </p><p>梨子价格:{{ priceTwo | roundPrice | formatPrice("$") }} </p><p>香蕉价格:{{ priceThree | roundPrice  | formatPrice("$") }} </p>
</div><div id="example"><!-- 在第二个vue实例上不能使用第一个实例的过滤器, -->{{ price | roundPrice }}
</div><script>   const vm = new Vue({el: "#app",data: {priceOne: 2312,priceTwo: 1825,priceThree: 1634,},filters:{roundPrice(price){return Math.round(price/100);},formatPrice(price,symbol){return symbol+price.toFixed(2) +'元/斤'}}})const vm2 = new Vue({el:"#example",data:{price:6123}})
</script>

如果我们在第二个vue实例上使用过滤器就会报错,


所以我们可以注册全局过滤器,所有的组件都能使用

<div id="app"><p>苹果价格:{{ priceOne | roundPrice | formatPrice("¥")}} </p><p>梨子价格:{{ priceTwo | roundPrice | formatPrice("$") }} </p><p>香蕉价格:{{ priceThree | roundPrice  | formatPrice("$") }} </p>
</div><div id="example">{{ price | formatPrice("$") }}
</div><script>   // 注册全局过滤器Vue.filter("formatPrice",function(price,symbol){return symbol+price.toFixed(2) +'元/斤'})const vm = new Vue({el: "#app",data: {priceOne: 2312,priceTwo: 1825,priceThree: 1634,},filters:{roundPrice(price){return Math.round(price/100);}}})const vm2 = new Vue({el:"#example",data:{price:6123}})
</script>

注册的全局过滤器,就可以在vue任何地方使用

这种方式适合整个应用都会用到的过滤器,


6. 过滤器注意事项

6.1 过滤器中的this

过滤器是唯一不能使用this来访问数据或者其他方法的地方,这一点是故意设计成这样的, 因为过滤器应该是一个纯函数, 也就是对于同样的输入每次都返回同样的输出,而不涉及任何外部数据, 如果想访问外部数据可以通过参数传递.


6.2 过滤器使用的地方

另一件注意事项就是过滤器只能在插值和v-bind指令中使用过滤器,但是在Vue1 中,可以在任何可以使用表达式的地方使用过滤器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/15644.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【完整解析】2024电工杯数学建模A题论文与代码

园区微电网风光储协调优化配置 1 论文2 代码分享2.1 第三题第一问 3 数据与代码 1 论文 2 代码分享 2.1 第三题第一问 function anssq3w1ObjFun(ttt,id); %ttttt(1); tt[750,0,0,1000,600,500]; limttt(1)*200; limmttt(2)*500*0.9-ttt(2)*500*0.1; t1ttt(3)*1000;t2ttt(4)*1…

设计模式--模板方法模式

模板方法模式是一种行为设计模式&#xff0c;它定义了一个操作中的算法的骨架&#xff0c;而将一些步骤延迟到子类中实现。这种模式在许多应用场景中非常有用&#xff0c;例如在实现算法的通用框架、代码重用、封装实现细节以及确保算法的正确执行时。 应用场景 实现算法的通…

ASP+ACCESS多功能论坛程序设计

摘 要 随着计算机的广泛应用&#xff0c;人们已经对网络不再感到陌生。在科技飞速发展的今天&#xff0c;电脑信息技术与各行各业进行了有效的结合。人们在网上可以进行网上购物&#xff0c;网上交友&#xff0c;电子商务&#xff0c;网络营效等等。面对强大的网络功能&#x…

通过Kafka-Logger插件收集流量进行漏洞扫描

通过Kafka-Logger插件收集流量进行漏洞扫描 方案 可以通过APISIX kafka-logger 插件将日志作为 JSON 对象推送到 Apache Kafka 集群中&#xff0c;消费Kafka里的数据格式化后添加到MySQL。 方案详情 1、登录APISIX&#xff0c;启用内置的kafka-logger 插件&#xff1a; 2…

从 0 实现一个文件搜索工具 (Java 项目)

背景 各文件系统下, 都有提供文件查找的功能, 但是一般而言搜索速度很慢 本项目仿照 everything 工具, 实现本地文件的快速搜索 实现功能 选择指定本地目录, 根据输入的信息, 进行搜索, 显示指定目录下的匹配文件信息文件夹包含中文时, 支持汉语拼音搜索 (全拼 / 首字母匹配…

DiffMap:首个利用LDM来增强高精地图构建的网络

论文标题&#xff1a; DiffMap: Enhancing Map Segmentation with Map Prior Using Diffusion Model 论文作者&#xff1a; Peijin Jia, Tuopu Wen, Ziang Luo, Mengmeng Yang, Kun Jiang, Zhiquan Lei, Xuewei Tang, Ziyuan Liu, Le Cui, Kehua Sheng, Bo Zhang, Diange Ya…

深入分析 Android Activity (四)

深入分析 Android Activity (四) 1. Activity 的生命周期详解 Activity 的生命周期方法提供了一组回调&#xff0c;使开发者能够在不同状态下执行相应的逻辑。了解这些方法有助于开发者管理资源和确保应用程序的行为一致。 1.1 onCreate onCreate 是 Activity 的入口点&…

解决go install 网络问题

rootiZbp1hiqzlhh6w05gloffgZ:~# go install mvdan.cc/garblelatest go: mvdan.cc/garblelatest: module mvdan.cc/garble: Get "https://proxy.golang.org/mvdan.cc/garble/v/list": dial tcp 172.217.160.81:443: i/o timeout解决方法 更换阿里代理 rootiZbp1hiq…

浅论未来 IT 和财务结合的趋势

前言 会计核算企业各类业务单据&#xff0c;所有业务部门的数据都会汇流到财务部来&#xff0c;所以会计其实是企业的数据中心&#xff1b;而 IT 技术正是处理数据的利器&#xff0c;可以将重复的流程自动化&#xff0c;还能将财务数据可视化&#xff1b;因此&#xff0c;两者…

docker image prune -f 命令什么用途

docker image prune -f 命令用于清理系统中未被使用的 Docker 镜像。具体来说&#xff0c;它会删除那些未被任何容器使用的悬空镜像&#xff08;dangling images&#xff09;&#xff0c;从而释放磁盘空间。 以下是 docker image prune -f 命令的具体用途和作用&#xff1a; …

SPI通信(STM32)

一、SPI通信 &#xff11;、SPI&#xff08;Serial Peripheral Interface&#xff09;是由Motorola公司开发的一种通用数据总线 &#xff12;、四根通信线&#xff1a;SCK&#xff08;Serial Clock&#xff09;、MOSI&#xff08;Master Output Slave Input&#xff09;、MIS…

【计算理论】【《计算理论导引(原书第3版)》笔记】第〇章:绪论

文章目录 [toc]第〇章&#xff1a;绪论0.1|自动机、可计算性与复杂性计算复杂性理论可计算性理论自动机理论 0.2|数学概念和术语集合关系等价关系 图简单路径连通图圈强连通图 字符串和语言字母表上的字符串空串 w w w的反转&#xff08;倒序&#xff09; x x x和 y y y的连接字…

esp32-idf 开发踩坑记录

现象 直接使用原始命令编译idf.py build 但是提示idf 版本错误 卸载旧版本 编译出错build 问题 然后删除编译文件后&#xff0c;重新编译&#xff0c;还是出错 解决方法1 最后发现是因为项目所在文件夹有中文目录&#xff0c;把项目迁移到英文目录后&#xff0c;重新编译&a…

打破传统相亲模式,这几款靠谱的相亲软件助你脱单

相亲软件在当今社会已经变得越来越普遍&#xff0c;市面上有众多相亲软件可供选择&#xff0c;但哪些相亲软件好用呢&#xff1f;下面介绍几款备受好评的相亲软件&#xff0c;帮助你在茫茫人海中找到那个对的人&#xff01; 1、一伴婚恋 这个APP它最大的优点就是信息真实靠谱…

LIMS系统在汽车检测实验室的应用

随着汽车行业的快速发展&#xff0c;汽车检测实验室的工作量不断增加&#xff0c;对实验室的管理效率和数据准确性提出了更高的要求。建设LIMS系统旨在实现实验室的全面数字化管理&#xff0c;提高工作效率&#xff0c;降低运营成本&#xff0c;并提升数据质量与决策支持能力。…

找出可整除性得分最大的整数 - (LeetCode)

概述 昨天非常忙&#xff0c;上午去做体检&#xff0c;下午去拿报告&#xff0c;晚上和老刘吃撸了一个串&#xff0c;深入交流生活的不易&#xff0c;岁月变化的快&#xff0c;话回算法题&#xff0c;今天的题目比较容易&#xff0c;花了一会就能写出来。 今天这题是&#xf…

Filter和Interceptor

会话 cookie 服务器自动将cookie响应给浏览器 浏览器接收响应回来的数据 自动将cookie存储在本地&#xff0c; 后续请求当中浏览器将cookie携带到服务器 cookie不能跨域&#xff0c;存储在客户端 session 存储在服务器 token------>JWT 存储在客户端&#xff0c; 服务…

[leetcode]第 n个丑数

我们把只包含质因子 2、3 和 5 的数称作丑数&#xff08;Ugly Number&#xff09;。求按从小到大的顺序的第 n 个丑数。 示例: 输入: n 10 输出: 12 解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。 1 2 3 说明: 1 是丑数。 n 不超过1690。 class Solution {public…

【C++ QT项目实战-03】---- C++ QT系统实现读取JSON文件数据的自动化模式

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a;C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &#…

分布式系统

分布式系统是建立在网络之上的软件系统,其主要特点是具有高度的内聚性和透明性。在一个分布式系统中,一组独立的计算机展现给用户的是一个统一的整体。这些系统拥有多种通用的物理和逻辑资源,可以动态地分配任务,分散的物理和逻辑资源通过计算机网络实现信息交换。 分布式…