Vue源码系列讲解——过滤器篇【一】(用法回顾)

目录

1. 前言

2. 用法回顾

2.1 使用方式

2.2 过滤器的定义

2.3 串联过滤器

3. 小结


1. 前言

过滤器在我们日常开发中应该算是一个非常常用的功能了,它经常会被用来格式化模板中的文本。过滤器可以单个使用,也可以多个串联一起使用,还可以传参数使用。那么在Vue中过滤器是如何工作的呢?其内部原理是怎样的?Vue又是如何识别出我们所写的过滤器的?接下来,我们将从源码角度出发,探究过滤器内部的工作原理,分析其工作流程,揭开它神秘的面纱。

2. 用法回顾

在介绍过滤器内部原理之前,我们先根据官方文档来回顾一下过滤器的使用方法。

2.1 使用方式

过滤器有两种使用方式:在双花括号插值中和在 v-bind 表达式中 (后者从 2.1.0+ 开始支持)。过滤器应该被添加在 JavaScript 表达式的尾部,由“|”符号指示:

<!-- 在双花括号中 -->
{{ message | capitalize }}<!-- 在 `v-bind` 中 -->
<div v-bind:id="rawId | formatId"></div>

2.2 过滤器的定义

你可以在一个组件的选项中定义本地的过滤器:

filters: {capitalize: function (value) {if (!value) return ''value = value.toString()return value.charAt(0).toUpperCase() + value.slice(1)}
}

也可以在创建 Vue 实例之前使用全局APIVue.filter来定义全局过滤器:

Vue.filter('capitalize', function (value) {if (!value) return ''value = value.toString()return value.charAt(0).toUpperCase() + value.slice(1)
})

当全局过滤器和局部过滤器重名时,会采用局部过滤器。

2.3 串联过滤器

过滤器函数总接收表达式的值 (之前的操作链的结果) 作为第一个参数。在上述例子中,capitalize 过滤器函数将会收到 message 的值作为第一个参数。

过滤器可以串联:

{{ message | filterA | filterB }}

在这个例子中,filterA 被定义为接收单个参数的过滤器函数,表达式 message 的值将作为参数传入到函数中。然后继续调用同样被定义为接收单个参数的过滤器函数 filterB,将 filterA 的结果传递到 filterB 中。

过滤器是 JavaScript 函数,因此可以接收参数:

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

这里,filterA 被定义为接收三个参数的过滤器函数。其中 message 的值作为第一个参数,普通字符串 'arg1' 作为第二个参数,表达式 arg2 的值作为第三个参数。

3. 小结

通过用法回顾可以知道,过滤器有两种使用方式,分别是在双花括号插值中和在 v-bind 表达式中。无论是哪种使用方式,它的使用形式都是表达式 | 过滤器1 | 过滤器2 | ...

并且,我们知道了过滤器的定义也有两种方式,分别是在组件选项内定义和使用全局APIVue.filter定义全局过滤器。在组件选项内定义的过滤器称为本地过滤器,它只能用于当前组件中。使用Vue.filter定义的过滤器称为全局过滤器,它可以用在任意组件中。

另外,我们还知道了过滤器不仅可以单个使用,还可以多个串联一起使用。当多个过滤器串联一起使用的时候,前一个过滤器的输出是后一个过滤器的输入,通过将多种不同的过滤器进行组合使用来将文本处理成最终需要的格式。

最后,官方文档还说了所谓过滤器本质上就是一个JS函数,所以我们在使用过滤器的时候还可以给过滤器传入参数,过滤器接收的第一个参数永远是表达式的值,或者是前一个过滤器处理后的结果,后续其余的参数可以被用于过滤器内部的过滤规则中。

了解了过滤器的用法之后,那么接下来我们就对其内部原理一探究竟。

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

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

相关文章

为什么最近黄金回收如此火爆?

龙行龘龘&#xff01;龙年不仅买金热&#xff0c;卖金也大热。近来&#xff0c;黄金回收行业异军突起&#xff0c;成为了市场上的热门话题。无论是街头巷尾的小店&#xff0c;还是网络上的各大平台&#xff0c;黄金回收的广告和宣传都屡见不鲜。那么&#xff0c;为什么最近黄金…

Prometheus Kube-Proxy endpoint connection refused

问题 Kube-Proxy endpoint connection refused 解决方法&#xff1a; $ kubectl edit cm/kube-proxy -n kube-system ## Change frommetricsBindAddress: 127.0.0.1:10249 ### <--- Too secure ## Change tometricsBindAddress: 0.0.0.0:10249 $ kubectl delete pod -l …

python代码性能分析

基准测试可以发现程序变慢了&#xff0c;那么是因为什么原因导致性能变慢的&#xff0c;需要进一步做代码性能分析。python同样提供了性能分析工具。 cProfile cProfile是python默认的性能分析器&#xff0c;他只测量CPU时间&#xff0c;并不关心内存消耗和其他与内存相关联的…

操作教程|使用MeterSphere对恒生UFX系统进行压力测试

恒生UFX&#xff08;United Finance Exchange&#xff0c;统一金融交换&#xff09;系统&#xff08;以下简称为“UFX系统”&#xff09;&#xff0c;是一款帮助证券公司统一管理外部接入客户的系统&#xff0c;该系统整体上覆盖了期货、证券、基金、银行、信托、海外业务等各类…

size_t 和double相乘怎么转换size_t

在C中&#xff0c;size_t和double可以直接相乘&#xff0c;结果会自动转换为double类型。如果你想要得到的结果是size_t类型&#xff0c;你需要进行显式类型转换。但是要注意&#xff0c;double转size_t可能会丢失小数部分&#xff0c;只保留整数部分。 以下是一个例子&#x…

【实战】K8S集群部署nacos并接入Springcloud项目容器化运维

文章目录 前言Nacos集群搭建Spring cloud配置nacos将Springcloud项目部署在k8s写在最后 前言 相信很多同学都开发过以微服务为架构的系统&#xff0c;开发微服务必不可少要使用注册中心&#xff0c;比如nacos\consul等等。当然在自动化运维流行的今天&#xff0c;我们也会将注…

2024公共管理、工商管理和贸易经济国际学术会议(PABATE2024)

2024公共管理、工商管理和贸易经济国际学术会议(PABATE2024) 一、【会议简介】 2024公共管理、工商管理和贸易经济国际学术会议&#xff08;PABATE2024&#xff09;将于2024年在郑州举行。该会议旨在为公共管理、工商管理和贸易经济领域的学者和从业人员提供一个交流和分享的…

【Web】Java原生反序列化之jdk7u21——又见动态代理

目录 前言 利用链 简单分析 触发invoke的核心&#xff1a;AnnotationInvocationHandler#equalsImpl 巧用动态代理调用equalsImpl 反序列化的入口&#xff1a;HashSet hash相等构造 为何还是用了LinkedHashSet EXP 前言 jdk7u21这条原生链equals那部分和CC7挺像的(前者…

Day22:安全开发-PHP应用留言板功能超全局变量数据库操作第三方插件引用

目录 开发环境 数据导入-mysql架构&库表列 数据库操作-mysqli函数&增删改查 数据接收输出-html混编&超全局变量 第三方插件引用-js传参&函数对象调用 完整源码 思维导图 PHP知识点&#xff1a; 功能&#xff1a;新闻列表&#xff0c;会员中心&#xff0…

设计模式之备忘录模式

备忘录模式&#xff08;Memento&#xff09; 定义 在不破坏封装的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在该对象之外保存这个状态。 使用场景 主要角色 发起人 Originator 需要备份的对象看管人 Caretaker 保存备份的容器备忘录 Memento 备份对象 类图…

利用chatgpt写论文使用教程

ChatGPT是人工智能技术的一种&#xff0c;可帮助人们综合运用和分析各种语言技巧&#xff0c;从而优化实验结果、加速研究流程以及提高文章质量。以下是利用ChatGPT写论文的使用教程&#xff1a; 综上所述&#xff0c;利用ChatGPT写论文涉及到一些技巧和方法&#xff0c;需要合…

API(接口) | 软件组件之间信息交互的“桥梁”

Hi&#xff0c;大家好&#xff0c;我是半亩花海。本文主要从 API 的定义、包含、用途和其他方面来简单地介绍 API&#xff08;接口&#xff09; ——软件组件之间信息交互的“桥梁”。 目录 一、什么是 API&#xff1f; 二、 API 中所包含哪些&#xff1f; 补充 三、API 可…

C盘中的休眠文件hiberfil.sys如何删除?

电脑休眠指整机将完全停止供电&#xff0c;而将当前处于运行状态的数据保存在硬盘中&#xff0c;下次启动的时候可以根据保存的休眠文件快速启动&#xff0c;还原上一次的电脑状态。 Win10的系统休眠文件叫作hiberfil.sys&#xff0c;它是系统休眠时临时保存的文件&#xff0c…

搜索-BFS 练习题 奇怪的电梯

奇怪的电梯 题目链接 题目描述 呵呵&#xff0c;有一天我做了一个梦&#xff0c;梦见了一种很奇怪的电梯。大楼的每一层楼都可以停电梯&#xff0c;而且第 i i i 层楼&#xff08; 1 ≤ i ≤ N 1 \le i \le N 1≤i≤N&#xff09;上有一个数字 K i K_i Ki​&#xff08; 0…

Java单例模式源码剖析及使用场景

Java中常用的单例模式实现方式主要有以下几种: 饿汉式 这种方式在类加载时就完成了实例的创建,是线程安全的。 public class Singleton {private static final Singleton instance new Singleton();private Singleton() {}public static Singleton getInstance() {return i…

mac vs code 文件滑到底很多空白的解决办法

ref&#xff1a;https://stackoverflow.com/questions/1747282/how-to-make-visual-studio-editor-stop-scrolling-past-bottom-of-a-file/40588828#40588828 设置、user settings: 加入&#xff1a;"editor.scrollBeyondLastLine": false

Windows系统下使用SVN版本管理的指南

前言 版本控制对于软件开发来说至关重要&#xff0c;它不仅帮助我们管理源代码的历史记录&#xff0c;也使得多人协作变得可能。SVN&#xff08;Subversion&#xff09;是一个流行的版本控制系统&#xff0c;特别是在Windows环境中&#xff0c;通过使用如TortoiseSVN这样的客户…

oracle linux7.9(centos7.9)安装nvidia GPU显卡驱动

一.业务场景 公司服务器配置了nvidia GPU显卡&#xff0c;安装的是oracle linux7.9操作系统&#xff0c;以下是安装GPU显卡驱动的操作。 二.GPU显卡驱动的前安装步骤 1.安装前的依赖软件的安装 yum -y install epel-release kernel-devel dkms gcc备注&#xff1a;利用unam…

自己优化重写了一个定时批量自动预约茅台的系统,每天帮我全家自动预约

自己优化重写了一个定时批量自动预约茅台的系统&#xff0c;每天帮我全家自动预约&#xff0c;预约结果通过邮件推送给我&#xff0c;每天手机能收到预约结果 这里写一下思路&#xff1a; 我并不是自己重头写了这个软件&#xff0c;只是基于开源系统优化了这个软件个人使用&am…

四信全球化拓展再启新篇!LoRa传感器与云平台领航智能感知时代

随着科技浪潮的不断推进&#xff0c;物联网已逐渐融入我们的生活。刚刚结束的MWC24盛会上&#xff0c;四信带来了一系列前沿技术成果&#xff0c;不仅将5G技术成功扩展至当前市场主流类型的终端&#xff0c;更携手联通、ASR等业界巨头&#xff0c;在连接、5G RedCap、AI、LoRa以…