Angular 中的
Pipes 是简单的函数,用于在不修改底层数据的情况下转换模板中的数据。管道接收一个值,对其进行处理,然后返回格式化或转换后的输出。它们通常用于格式化日期、数字、字符串,甚至数组或对象。
它们允许您直接在视图中以更具可读性或相关性的格式格式化和显示数据,而无需更改底层数据模型。
使用管道有助于保持代码干净和可读。您可以将该逻辑封装在 pipe 中,而不是在模板或组件中编写复杂的逻辑,然后可以在应用程序的不同部分中重用该逻辑。
例如,如果您正在开发一个博客平台,用户可以在其中查看文章的发布日期。日期需要以用户友好的格式显示,例如“2024 年 8 月 31 日”,而不是原始格式“2024–08–31T14:48:00.000Z”。借助 pipes,您可以在模板中使用 Angular 内置的 DatePipe,而不是在组件中手动格式化日期,这会导致代码混乱并降低可读性。
<p>Published on: {{ article.publishDate | date:'longDate' }}</p>
要应用管道,请在模板表达式中使用 管道 运算符 (|),如上面的代码示例所示。
内置管道
Angular 附带了几个涵盖常见任务的内置管道(DatePipe、UpperCasePipe、LowerCasePipe、CurrencyPipe、AsyncPipe、JsonPipe、 等)。知道如何使用这些可以让你的代码更干净、更高效。
示例:
<pre class="brush:php;toolbar:false">{{ user | json }}
Price: {{ product.price | currency:'USD' }}
{{ user.name | uppercase }}
参数化管道
许多 Angular 管道接受参数来自定义其行为。
要指定参数,请在管道名称后面加上冒号 (:) 和参数值
一些管道接受多个参数,这些参数由额外的冒号分隔。
参数可以是可选或必需。假设您有一个格式化货币的自定义管道,并要求您指定货币类型作为参数。如果未提供此参数,管道可能无法正确格式化该值。
<p>The product price is {{ price | customCurrency:'USD' }}</p>
1。带参数的 DatePipe
<p>Published on: {{ article.publishDate | date:'MMMM d, y, h:mm:ss a' }}</p>
这会将日期格式设置为“2024 年 8 月 31 日,下午 2:48:00”。
2。带参数的CurrencyPipe
<p>Price: {{ product.price | currency:'EUR':'symbol-narrow':'1.0-0' }}</p>
这会将价格格式化为“€1,235”(四舍五入到没有小数位)。
链接管道
您可以将多个管道链接在一起以实现复杂的转换。
<p>{{ article.content | slice:0:100 | uppercase }}</p>
这将分割 article.content 的前 100 个字符并将它们转换为大写。
定制管道
有时,内置管道可能无法满足您的特定需求,您需要创建自定义管道来处理特定逻辑。具体方法如下。
示例:
在下面的示例中,我们将创建一个管道,为诸如“Hello, Alice!”之类的名称添加问候语
运行以下命令生成新管道:
ng generate pipe greet
现在,让我们修改 src/app 目录中的greet.pipe.ts 文件以包含管道逻辑:
import { Pipe, PipeTransform } from '@angular/core'; @Pipe({ name: 'greet', // This is the name you'll use in the template standalone: true, }) export class GreetPipe implements PipeTransform { transform(value: string): string { return `Hello, ${value}!`; // This is the transformation logic } }
管道准备好后,您就可以在模板中使用它。
<p>{{ 'Alice' | greet }}</p>
创建参数化自定义管道
现在我们要自定义问候语,这样你就可以说“嗨,爱丽丝!”或“欢迎,爱丽丝!”取决于您传递给管道的内容。
import { Pipe, PipeTransform } from '@angular/core'; @Pipe({ name: 'greet', // Same pipe name as before standalone: true, }) export class GreetPipe implements PipeTransform { transform(value: string, greeting: string = 'Hello'): string { return `${greeting}, ${value}!`; // Now it uses the greeting passed in } }
transform 方法现在有第二个参数,greeting。如果没有提供问候语,则默认为“Hello”。
现在您可以在模板中自定义问候语。
<p>{{ 'Alice' | greet:'Hi' }}</p> <p>{{ 'Bob' | greet:'Welcome' }}</p>
纯净管道与不纯净管道
1。纯管
默认情况下,所有 Angular 管道都是纯。 纯管道仅在输入数据(如数字或字符串)或对对象的引用(如数组或日期)更改时被调用。这使得纯管道变得高效且高性能,因为管道不会不必要地运行。
但是,如果您的数据更复杂,例如项目数组,Angular 可能不会注意到数组内部的更改(例如添加新项目),因为对数组的引用没有更改。
除非必要,请保持管道纯净以避免不必要的重新渲染并保持性能。
示例:
@Pipe({ name: "onSale", standalone: true, pure: true, }) export class OnSalePipe implements PipeTransform { transform(items: Item[]): Item[] { return items.filter((item) => item.isOnSale); } }
在您的模板中:
- {{ item.name }} - {{ item.price | formatPrice }}
If you add a new item to the items array that’s on sale, you might expect it to show up in the list. But if you simply push the new item into the array, the list might not update because the array reference hasn’t changed.
2. Impure Pipes
An impure pipe, on the other hand, is called every time Angular performs a change detection cycle. However, because they run so often, they can slow down your app.
Example:
@Pipe({ name: "onSaleImpure", standalone: true, pure: false, }) export class OnSaleImpurePipe implements PipeTransform { transform(items: Item[]): Item[] { return items.filter((item) => item.isOnSale); } }
In your template:
- {{ item.name }} - {{ item.price | formatPrice }}
Now, when you add a new item, the pipe will notice the change and update the list.
Best Practices for Using Pipes
Keep Pipes Simple. Avoid Heavy Computations in Pipes
Name Pipes Clearly and Descriptively
Keep Pipes Focused on a Single Responsibility
Avoid Impure Pipes When Possible
Test Custom Pipes Thoroughly
Conclusion
Angular pipes streamline data transformation tasks, making your code more modular, reusable, and maintainable. They help to enforce consistency across the application and improve the readability of your templates, which is crucial for developing scalable and maintainable applications.
以上是角管:综合指南的详细内容。更多信息请关注PHP中文网其他相关文章!

JavaScript字符串替换方法详解及常见问题解答 本文将探讨两种在JavaScript中替换字符串字符的方法:在JavaScript代码内部替换和在网页HTML内部替换。 在JavaScript代码内部替换字符串 最直接的方法是使用replace()方法: str = str.replace("find","replace"); 该方法仅替换第一个匹配项。要替换所有匹配项,需使用正则表达式并添加全局标志g: str = str.replace(/fi

本文讨论了在浏览器中优化JavaScript性能的策略,重点是减少执行时间并最大程度地减少对页面负载速度的影响。

本文讨论了使用浏览器开发人员工具的有效JavaScript调试,专注于设置断点,使用控制台和分析性能。

将矩阵电影特效带入你的网页!这是一个基于著名电影《黑客帝国》的酷炫jQuery插件。该插件模拟了电影中经典的绿色字符特效,只需选择一张图片,插件就会将其转换为充满数字字符的矩阵风格画面。快来试试吧,非常有趣! 工作原理 插件将图片加载到画布上,读取像素和颜色值: data = ctx.getImageData(x, y, settings.grainSize, settings.grainSize).data 插件巧妙地读取图片的矩形区域,并利用jQuery计算每个区域的平均颜色。然后,使用

本文将引导您使用jQuery库创建一个简单的图片轮播。我们将使用bxSlider库,它基于jQuery构建,并提供许多配置选项来设置轮播。 如今,图片轮播已成为网站必备功能——一图胜千言! 决定使用图片轮播后,下一个问题是如何创建它。首先,您需要收集高质量、高分辨率的图片。 接下来,您需要使用HTML和一些JavaScript代码来创建图片轮播。网络上有很多库可以帮助您以不同的方式创建轮播。我们将使用开源的bxSlider库。 bxSlider库支持响应式设计,因此使用此库构建的轮播可以适应任何

核心要点 利用 JavaScript 增强结构化标记可以显着提升网页内容的可访问性和可维护性,同时减小文件大小。 JavaScript 可有效地用于为 HTML 元素动态添加功能,例如使用 cite 属性自动在块引用中插入引用链接。 将 JavaScript 与结构化标记集成,可以创建动态用户界面,例如无需页面刷新的选项卡面板。 确保 JavaScript 增强功能不会妨碍网页的基本功能至关重要;即使禁用 JavaScript,页面也应保持功能正常。 可以使用高级 JavaScript 技术(

数据集对于构建API模型和各种业务流程至关重要。这就是为什么导入和导出CSV是经常需要的功能。在本教程中,您将学习如何在Angular中下载和导入CSV文件


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

Atom编辑器mac版下载
最流行的的开源编辑器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

禅工作室 13.0.1
功能强大的PHP集成开发环境