美文网首页Angular框架专题
Angular框架中的Pipe管道符(配合8.X源码)

Angular框架中的Pipe管道符(配合8.X源码)

作者: 听书先生 | 来源:发表于2021-11-22 23:33 被阅读0次

Angular中的Pipe管道主要的目的是用来对输入的数据进行处理的(比如:大小写的转换、数值的计算、以及日期的格式化)

1、内置管道
管道名 用途
DatePipe 日期管道,格式化日期
JsonPipe 将输入数据对象经过JSON.stringify()方法转换后输出对象的字符串
UpperCasePipe 将文本所有小写字母转换成大写字母
LowerCasePipe 将文本所有大写字母转换成小写字母
DecimalPipe 将数值按特定的格式显示文本
CurrentcyPipe 将数值转百分比格式
SlicePipe 将数组或者字符串裁剪成新子集
  • 大写转换:
<div>
   <p>{{ 'abcd' | uppercase }}</p> 
</div>

// ABCD
  • 小写转换:
<div>
   <p>{{ 'ABCD' | lowercase }}</p> 
</div>

// abcd
  • 数值转换:
    DecimalPipe管道用于对数值的整数与小数部分按照指定规则进行格式化

{minIntegerDigits}.{minFractionDigits}-{maxfractionDigits}

  • minIntegerDigits:整数部分保留最小的位数,默认值为1.
  • minFractionDigits:小数部分保留最小的位数,默认值为0.
  • maxFractionDigits:小数部分保留最大的位数,默认值为3.
<p>{{ 3.14159265 | number: '1.4-4' }}</p>  

// 3.1416
  • 日期格式化:
    一般的格式:expression | date: format
    表达式可以是 Date日期对象或者是日期字符串(2021/11/22)、毫秒级时间戳
<p>{{ '2021/11/22' | date: 'EEE' }}</p>

// Mon
  • JavaScript 对象序列化:
    利用JSON.stringify()来将输入数据对象转换成对象字符串
obj = {
    name:'zhangsan',
    age:20,
    foo(){
      console.log('123');
    }
  }

<p>{{ obj | json }}</p>

// { "name": "zhangsan", "age": 20 }
  • CurrencyPipe货币管道:
    可以将数值进行货币格式化处理

表达式:expression | currency[: currencyCode[: symbolDisplay[: digitInfo]]]

  • 参数currentcyCode:表示要格式化的目标货币格式,值为ISO 4217货币码,如CNY人民币、USD美元、EUR欧元等。
  • 参数symbolDisplay:表示以该类型货币的哪种格式显示,值为布尔值,true表示显示货币符号如¥、$等,false表示显示ISO 4217货币码如CNY、USD等。
  • digitInfo:参考DecimalPipe管道。
<p>{{ 200.12 | currency:'CNY':true:'3.0-0' }}</p>

// CN¥200
  • PercentPipe百分比管道:
    可以对数值进行百分比处理

表达式:expression | percent[: digitInfo]

<p>{{ 0.245 | percent:'2.1-2' }}</p>

// 24.5%
  • SlicePipe管道:
    用于裁剪数组或字符串,返回裁剪后的目标子集

表达式:expression | slice: start[: end]

<p>{{ 0.245 | percent:'2.1-2' }}</p>

// 24.5%
2、管道链

管道链可以将多个管道连接在一起,组成管道链对数据进行处理。

str = 'abcde';

<p>{{ str | slice:0:3 | uppercase  }}</p>

// ABC
3、自定义管道

开发者也可以自己去定义管道符,主要的步骤为以下几个步骤:

  • 1、使用@pipe装饰器去定义Pipe的metadata信息,比如管道符的名称
  • 2、再去实现PipeTrandform接口中定义的transform方法

getKey.pipe.ts:

import { Pipe, PipeTransform } from '@angular/core';

// 获取对象的键值
@Pipe({ name: 'getKey' })
export class GetKeyPipe implements PipeTransform {
  transform(value: any, args?:any): any {
    return Object.keys(value).map((key) => Object.assign({ key }, value[key]));
  }
} 

4、管道分类:
  • pure管道:仅当管道输入值变化的时候,才会执行转换操作,默认的类型是pure类型。
  • impure管道:在每次变化检测期间都会执行。

Pipe管道相关ts接口定义:

export interface Pipe {
  name: string;
  pure ?: boolean;
}

PipeDecorator接口定义:

export const Pipe: PipeDecorator = <PipeDecorator>makeDecorator('Pipe', {
  name: undefined,
  pure: true, // 默认是pure
});

PipeTransform接口定义:

export interface PipeTransform {
  transform(value: any, ...args: any[]): any;
}
5、PipeResolver部分
// @angular/compiler/src/pipe_resolver.ts
@CompilerInjectable()
export class PipeResolver {
  constructor(private _reflector: ɵReflectorReader = ɵreflector) {}

  // 通过内部的ɵReflectorReader对象提供的API读取metadata信息
  resolve(type: Type<any>, throwIfNotFound = true): Pipe {
    const metas = this._reflector.annotations(resolveForwardRef(type));
    if (metas) {
      // 读取保存的Pipe metadata 信息
      const annotation = ListWrapper.findLast(metas, _isPipeMetadata);
      if (annotation) { return annotation; }
    }
    if (throwIfNotFound) {
      throw new Error(`No Pipe decorator found on ${stringify(type)}`);
    }
    return null;
  }
}

相关文章

  • Angular框架中的Pipe管道符(配合8.X源码)

    Angular中的Pipe管道主要的目的是用来对输入的数据进行处理的(比如:大小写的转换、数值的计算、以及日期的格...

  • Angular Pipe

    Angular Pipe is object, not function, when pipe created, ...

  • angularjs教程视频angular4项目实战源码angul

    angularjs教程视频angular4项目实战源码angular7框架ionic案例 AngularJS诞生于...

  • Angular—pipe

    什么是pipe 中文释义“管道”。 把数据作为输入,然后转换它,给出期望的输出。例如,将UTC时间转为指定格式;中...

  • angular pipe 自定义管道

    可以理解为angular中的管道(pipe)与angular1.x的过滤器(filter)一样。 那么我们就来自定...

  • Angular component 组件内使用原生pipe

    Angular内置的pipe一般用在template中,比如下面的CurrencyPipe用来格式化货币 A: {...

  • io之pipe

    io包中通过pipe实现了管道 源码 总结 pipe最核心还是通过channel来进行通信,利用无缓冲channe...

  • Angular 关于pipe

    Angular 中的管道其实就是angularjs中的过滤器,用来转换数据然后显示给用户。要创建一个管道,必须实现...

  • Node.js源码解析-pipe实现

    Node.js源码解析-pipe实现 欢迎来我的博客阅读:《Node.js源码解析-pipe实现》 从前面两篇文章...

  • Angular2中Pipe的用法

    Pipe的作用 都是用来对输入的数据进行处理,如大小写转换、数值和日期格式化等。 Angular2的内建管道和分类...

网友评论

    本文标题:Angular框架中的Pipe管道符(配合8.X源码)

    本文链接:https://www.haomeiwen.com/subject/arkitrtx.html