Angular管道

管道(Pipe)可以对模板中的数据进行格式转换,这里讲一下管道的用法

管道

管道的基本用法如下,表达式经过管道后输出

{{ expression | pipeName }}

也可以这样,链式管道,表达式依次经过1、2、3号管道后输出结果

{{ expression | pipeName1 | pipeName2 | pipeName3 }}

自定义管道

自定义管道需要定义元数据和、实现transform方法

先引入Pipe和PipeTransform,@Pipe装饰符说明我们要定义的是个管道,PipeTransform来实现具体过程。

import { Pipe, PipeTransform } from '@angular/core';
@Pipe(name: 'sexReform', pure: true)  //指定管道名称、纯管道or非纯管道(name: string, pure: boolean)
export class SexReform implements PipeTransform {
  transform(value: string, args?: any): string {
    switch(value) {                   //这里面不管用switch还是其他的任何表达式都可以,就相当与一个处理的过程
      case 'male': reture '男';
      case 'female': return '女';
      default: return '未知性别';
    }  
  }
}                               //要使用自定义管道必须要像组件一样在模块中import并声明declaration

管道根据它们的变化监测机制,可以分为纯管道和非纯管道类型。

带参数的管道使用方法:

@Pipe(name: 'sexReform', pure: true)  //指定管道名称、纯管道or非纯管道(name: string, pure: boolean)
export class SexReform implements PipeTransform {
  transform(value: string, argA: any, argB: any) {
    ...
    ...

带参数的管道使用方法:
{{value | sexReform: argA: argB}}

纯管道

在模板表达式中使用纯管道(PurePipe),只有在监测到输入值发生纯变更时才会调用纯管道的transform()方法来实现数据转换,从而将数据更新到页面上。纯变更是指对基本数据类型(StringNumberBooleanSymbol)输入值的变更或对对象引用(DateArrayFunctionObject)的更改。

Angular会忽略(复合)对象内部的更改。 如果我们更改了输入日期(Date)中的月份、往一个输入数组(Array)中添加新值或者更新了一个输入对象(Object)的属性,Angular都不会调用纯管道。

在自定义管道中元数据pure属性设为true

非纯管道

使用非纯管道(ImpurePipe),Angular组件会在每个变化监测周期都会调用非纯管道,并执行管道的transform方法来更新页面数据,所以它会带来一定的性能问题。

在自定义管道中元数据pure属性设为false

转载于:https://my.oschina.net/u/3412211/blog/898581

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值