angular 管道使用实例及自定义管道

本文详细介绍了Angular中的管道使用,包括大小写转换、日期格式化、数字位数控制、JSON显示、字符串切片及管道链。同时,展示了如何定义和使用自定义管道,例如重复字符串的`repeat`管道。通过实例代码,帮助开发者更好地理解和应用Angular的管道功能。

angular pipe

angular中的管道(pipe)是用来数据进行处理,如大小写转换、数值和日期格式化等

pipe instance

1. 大小写

<p>{{str | uppercase}}</p>//转换成大写
<p>{{str | lowercase}}</p>//转换成小写

2. date

<p>{{today | date:'yyyy-MM-dd HH:mm:ss' }}</p>

3. 位数

//接收的参数格式为{最少整数位数}.{最少小数位数}-{最多小数位数} --//保留2~4位小数

<p>{{p | number:'1.2-4'}}</p> 

4.json

<p>{{ { name: 'semlinker' } | json }}</p> <!-- Output: { "name": "semlinker" } -->

5. slice

<p>{{ 'semlinker' | slice:0:3 }}</p> <!-- Output: sem -->

6. 管道链

<p>{{ 'semlinker' | slice:0:3 | uppercase }}</p> <!-- Output: SEM -->

自定义管道

pipe 定义

import {Pipe, PipeTransform} from '@angular/core';
[@Pipe](/user/Pipe)({name: 'repeat'})
export class RepeatPipe implements PipeTransform {
    transform(value: any, times: number) {
        return value.repeat(times);
    }
}

pipe 使用

<div>
   <p ngNonBindable>{{ 'lo' | repeat:3 }}</p>
   <p>{{ 'lo' | repeat:3 }}</p> <!-- Output: lololo -->
</div>
### 在 Angular使用自定义管道处理动态数据 在 Angular 中,自定义管道可以用来对动态数据进行转换或格式化。这种技术允许开发者将复杂的逻辑封装到管道中,并在模板中直接调用,从而简化组件代码并提高可维护性。 #### 创建自定义管道 首先需要创建一个新管道类,该类应继承 `PipeTransform` 接口并实现其唯一的抽象方法 `transform()`。下面是一个具体的例子,展示如何构建一个反转字符串的自定义管道。 ```typescript import { Pipe, PipeTransform } from '@angular/core'; @Pipe({ name: 'reverseStr' }) export class ReverseStrPipe implements PipeTransform { transform(value: string): string { if (!value) return ''; let reversed = value.split('').reverse().join(''); return reversed; } } ``` 这段代码定义了一个名为 `reverseStr` 的管道[^1],它接收一个字符串参数并将字符顺序翻转后再返回。 #### 将自定义管道应用于动态数据 一旦定义好了自定义管道,在任何地方只要简单地引用它的名字就能使用了。假设有一个不断变化的时间戳作为输入源,希望每次更新时都看到经过特殊处理后的版本——这里是被反向排列的文字表达形式。 ```typescript import { Component } from '@angular/core'; import { interval } from 'rxjs'; @Component({ selector: 'app-root', template: ` <div *ngIf="time$ | async as time"> 当前时间戳逆序表示为: {{ time | date:'medium' | reverseStr }} </div> `, styleUrls: ['./app.component.css'] }) export class AppComponent { time$: any; constructor() { this.time$ = interval(1000).pipe(map(() => new Date())); } } ``` 在此示例中,我们利用 RxJS 的 `interval` 函数每隔一秒生成一个新的日期实例推送过来;随后借助 Angular 内置的 `date` 管道先按标准模式渲染出易读的时间格式,再交给我们的自制 `reverseStr` 进一步变形输出[^3]。 注意这里的组合运用技巧非常重要,因为实际应用场景往往不会只涉及单一维度上的变换需求。 --- #### Pure vs Impure Pipes 默认情况下所有的用户定义型管道都是纯净(pure)状态运行着的,这意味着除非传入的数据本身确实有所改变(对于基本类型而言指的是完全不同的值,而对于复合结构则意味着整个实体已被替换成另一个),否则即使父级上下文中发生了其他方面的变动也不会促使管道重新计算结果[^2]。 如果你遇到某个特定场合下必须频繁响应哪怕细微层面的状态切换,则可以选择声明为不纯(non-pure / impure)类型的管道: ```typescript @Pipe({ name: 'alwaysChange', pure: false // 设置为false开启impure行为 }) export class AlwaysChangePipe implements PipeTransform { private count:number=0; transform(input:any){ console.log(`Invoked with input=${input}, invocationCount++`); return ++this.count; // 每次都被强制执行一次增量操作 } } ``` 尽管如此,请谨慎考虑性能影响因素,毕竟每一次变更探测周期都会触发此类非必要开销较大的运算过程。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值