angular2自定义管道和内置管道

本文深入探讨了Angular中各种管道的功能及应用,包括日期格式化、JSON转换、文本大小写转换等,提供了丰富的示例帮助理解。

{{bigimg | coverHeadImpPath}}


 

@Pipe({
	name:'coverHeadImpPath',
})

exportclassCoverHeadImpPathPipeimplementsPipeTransform{
	constructor(publicglobalData:GlobalData){
	}

	transform(value:string,type?:string,obj?:any){
		if(value){
			value=this.globalData.fileServer+"/"+value;
		}else{
			if(type&&type=="男"){
				value="./assets/imgs/common/default_head_img02.jpg";
			}elseif(type&&type=="女"){
				value="./assets/imgs/common/default_head_img03.jpg";
			}
		}
		if(obj){
			obj.onerror=()=>{
				if(type&&type=="男"){
					obj.src="./assets/imgs/common/default_head_img02.jpg";
				}elseif(type&&type=="女"){
					obj.src="./assets/imgs/common/default_head_img03.jpg";
				}
			};
		}
		returnvalue;
	}

}

 

 

管道

功能

DatePipe

日期管道,格式化日期

JsonPipe

将输入数据对象经过JSON.stringify()方法转换后输出对象的字符串

UpperCasePipe

将文本所有小写字母转换成大写字母

LowerCasePipe

将文本所有大写字母转换成小写字母

DecimalPipe

将数值按特定的格式显示文本

CurrentcyPipe

将数值进行货币格式化处理

SlicePipe

将数组或者字符串裁剪成新子集

PercentPipe

将数值转百分比格式

 

 

日期管道

 

{{ dateTime | date:'yyyy-MM-dd HH:mm:ss'}}

{{ dateTime | date:'medium' }}

{{ dateTime | date:'short' }}

{{ dateTime | date:'fullDate' }}

{{ dateTime | date:'longDate' }}

{{ dateTime | date:'mediumDate' }}

{{ dateTime | date:'shortDate' }}

{{ dateTime | date:'mediumTime' }}

{{ dateTime | date:'shortTime' }}

 

 

letsj=Utils.dateFormat(newDate(),"yyyy-MM-ddHH:mm:ss");

 

nz-date-picker 的部分 locale 来自于 Angular 自身的国际化支持,需要在 main.ts文件中 引入相应的 Angular 语言包。

 

import { registerLocaleData } from '@angular/common';

import zh from '@angular/common/locales/zh';

registerLocaleData(zh);

 

### 在 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; // 每次都被强制执行一次增量操作 } } ``` 尽管如此,请谨慎考虑性能影响因素,毕竟每一次变更探测周期都会触发此类非必要开销较大的运算过程。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值