[转]Angular2 使用管道Pipe以及自定义管道格式数据
2018-09-30 10:24
881 查看
本文转自:https://www.pocketdigi.com/20170209/1563.html
管道(Pipe)可以根据开发者的意愿将数据格式化,还可以多个管道串联。
纯管道(Pure Pipe)与非纯管道(Impure Pipe)
管道分纯管道(Pure Pipe)和非纯管道(Impure Pipe)。默认情况下,管道都是纯的,在自定义管道声明时把pure标志置为false,就是非纯管道。如:
@Pipe({ name: 'sexReform', pure:false })
纯管道和非纯管道的区别:
-
纯管道:
Angular只有检查到输入值发生纯变更时,才会执行纯管道。纯变更指的是,原始类型值(String,Number,Boolean,Symbol)的改变,或者对象引用的改变(对象值改变不是纯变更,不会执行).
-
非纯管道
Angular会在每个组件的变更检测周期执行非纯管道。所以,如果使用非纯管道,我们就得注意性能问题了。
管道使用语法
{{expression | pipe : arg}}
如果是链式串联:
{{expression | pipe1 : arg | pipe2 | pipe3 }}
常用内置管道
管道 | 类型 | 功能 |
---|---|---|
DatePipe | 纯管道 | 日期格式化 |
JsonPipe | 非纯管道 | 使用JSON.stringify()将对象转成json字符串 |
UpperCasePipe | 纯管道 | 将文本中的字母全部转在大写 |
LowerCasePipe | 纯管道 | 将文本中的字母全部转成小写 |
DecimalPipe | 纯管道 | 数值格式化 |
CurrencyPipe | 纯管道 | 货币格式化 |
PercentPipe | 纯管道 | 百分比格式化 |
SlicePipe | 非纯管道 | 数组或字符串取切割 |
-
DatePipe
语法:
{{expression | date:format}}
expression
支持日期对象、日期字符串、毫秒级时间戳。format
是指定的格式,常用标志符:y
年y
使用4位数字表示年份(2017),yy
使用两位数字表示(17) M
月M
1位或两位数字(2或10、11、12),MM
两位数字表示,前面补0(02)d
日d
一位或两位数字(9)dd
两位数字,前面补0(09)E
星期EEE
三位字母缩写的星期EEEE
星期全称j
12小时制时间j
(9 AM)jj
(09 AM)h
12小时制小时h
(9)hh
(09)H
24小时制小时H
(9)HH
(09)m
分m
(5)mm
(05)s
秒s
(1)ss
(01)z
时区z
China Standard Time
DecimalPipe
语法:
{{expression | number[: digiInfo] }}
digiInfo格式:
{minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}
即:整数位保留最小位数.小数位保留最小位数-小数位最大保留位置
默认值: 1.0-3
CurrencyPipe
语法:
{{expression | currency[: currencyCode[: symbolDisplay[: digiInfo]]] }}
digiInfo格式与DecimalPipe相同,不再解释。
currencyCod是指货币代码,其值为ISO 4217标准,人民币CNY,美元USD,欧元 EUR.
symbolDisplay是一个布尔值,true时显示货币符号($¥) false显示货币码
PercentPipe
语法:
{{expression | percent[: digiInfo] }}
digiInfo格式与DecimalPipe相同,不再解释。
SlicePipe
语法:
{{expression | slice: start [: end] }}
expression可以是一个字符串或数组。字符串时,该管道调用String.prototype.slice()方法截取子串。如果是数组,调用Array.prototype.slice()方法取数组子元素。
自定义管道
除了使用内置的管道,还可以通过自定义管道实现更复杂的功能。
创建管道:
ng g pipe sexReform
angular-cli会帮我们创建SexReformPipe管道,这个管道的功能是根据
male、
female返回中文的
男、
女。
代码:
import {Pipe, PipeTransform} from '@angular/core'; @Pipe({ name: 'sexReform', //非纯管道 pure:false }) export class SexReformPipe implements PipeTransform { transform(value: any, args?: any): any { let chineseSex; switch (value) { case 'male': chineseSex = '男'; break; case 'female': chineseSex = '女'; break; default: chineseSex = '未知性别'; break; } return chineseSex; } }
重点在于实现PipeTransform接口的transform方法,定义为非纯管道仅用于演示,非纯管道对性能影响较大,尽量避免。
演示代码
组件:
import { Component, OnInit } from '@angular/core'; @Component({ selector: 'app-pipe', templateUrl: './pipe.component.html', styleUrls: ['./pipe.component.css'] }) export class PipeComponent implements OnInit { date=new Date(); money=5.9372; object={title:'ffff',subTitle:'subtitlefff'}; str='abcdABCD'; percent=0.97989; constructor() { } ngOnInit() { } }
模板:
<p> {{date| date:'y-MM-dd HH:mm:ss'}} <br /> {{object| json }} <br /> {{str| uppercase }} <br /> {{str| lowercase }} <br /> {{money| number:'2.4-10' }} <br /> {{money| number:'5.1-2' }} <br /> {{money| currency:'CNY':false:'1.1-2' }} <br /> {{percent| percent:'1.1-2' }} <br /> {{str| slice:1:3 }} <br /> {{'female'| sexReform }} <br /> </p>
© 2017, 冰冻鱼. 请尊重作者劳动成果,复制转载保留本站链接! 应用开发笔记
相关文章推荐
- Angular2 使用管道Pipe以及自定义管道格式数据
- Angular2管道Pipe及自定义管道格式数据用法实例分析
- 使用windowsAPI穿件匿名管道pipe,父子进程间数据传递
- Android JSON数据格式的解析,与简单对象、带泛型的List和Map的转换,以及GSON的使用
- 高效传输数据格式以及基于HTTP2的RPC框架---gRPC的使用
- 【python】使用unix管道pipe处理stdout实时数据
- [转]使用NLog记录日志到数据库 自定义日志表的数据格式
- 使用commons-compress解压GBK格式winzip文件到UTF8,以及错误使用ZipArchiveInputStream读出来数据全是空的解决办法
- 在剪切板中使用自定义格式的数据
- 使用fastjson与SpringMVC实现自定义HttpMessageConverter接收和获取JSON格式的数据
- angular material 框架使用步骤(以及分页栏自定义)
- react_native 项目实战 (4) 自定义分类 使用 CheckBox 以及 数据存储asyncStorage
- 关于Datatables editor 的使用细节以及数据格式(第一次博客,希望对有需要的人有帮助)
- Ubuntu下Json库的封装以及json数据格式的使用
- Android上GTalk以及Push机制的XMPP数据选择使用protobuf格式而非XML格式
- excel 常用使用技巧 二(数据筛选、条件格式、自动换行、自定义序列、自定义单位、冻结窗格)
- Net使用Microsoft.Office.Interop.Excel;创建Excel文件(插入数据、修改格式、生成图表)的方法,以及Excel查看加密
- 【python】使用unix管道pipe处理stdout实时数据
- JSON数据格式以及GSON的使用
- Json数据格式的使用规则以及数据格式的选择