Angular2管道Pipe及自定义管道格式数据用法实例分析


Posted in Javascript onNovember 29, 2017

本文实例讲述了Angular2管道Pipe及自定义管道格式数据用法。分享给大家供大家参考,具体如下:

管道(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>

希望本文所述对大家AngularJS程序设计有所帮助。

Javascript 相关文章推荐
通用javascript脚本函数库 方便开发
Oct 13 Javascript
javascript实现可拖动变色并关闭层窗口实例
May 15 Javascript
JS实现屏蔽shift,Ctrl,alt等功能键的方法
Jun 01 Javascript
javascript数组排序汇总
Jul 07 Javascript
js实现网站最上边可关闭的浮动广告条代码
Sep 04 Javascript
举例讲解JavaScript substring()的使用方法
Nov 09 Javascript
详解javascript中对数据格式化的思考
Jan 23 Javascript
JavaScript实现瀑布流以及加载效果
Feb 11 Javascript
纯JS实现简单的日历
Jun 26 Javascript
使用vue实现简单键盘的示例(支持移动端和pc端)
Dec 25 Javascript
layui点击按钮添加可编辑的一行方法
Aug 15 Javascript
浅谈vue中使用编辑器vue-quill-editor踩过的坑
Aug 03 Javascript
node.js支持多用户web终端实现及安全方案
Nov 29 #Javascript
Angular4的输入属性与输出属性实例详解
Nov 29 #Javascript
node.js中axios使用心得总结
Nov 29 #Javascript
Vue2.0用户权限控制解决方案
Nov 29 #Javascript
vue.js项目中实用的小技巧汇总
Nov 29 #Javascript
关于 angularJS的一些用法
Nov 29 #Javascript
ReactNative之FlatList的具体使用方法
Nov 29 #Javascript
You might like
PHP5新特性: 更加面向对象化的PHP
2006/11/18 PHP
用PHP的ob_start();控制您的浏览器cache!
2007/02/14 PHP
UCenter中的一个可逆加密函数authcode函数代码
2010/07/20 PHP
php处理斐波那契数列非递归方法
2012/02/04 PHP
解决PHP4.0 和 PHP5.0类构造函数的兼容问题
2013/08/01 PHP
PHP代码优化的53个细节
2014/03/03 PHP
php中eval函数的危害与正确禁用方法
2014/06/30 PHP
php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
2014/11/04 PHP
Json_encode防止汉字转义成unicode的方法
2016/02/25 PHP
php语言的7种基本的排序方法
2020/12/28 PHP
DOM相关内容速查手册
2007/02/07 Javascript
百度留言本js 大家可以参考下
2009/10/13 Javascript
JSON语法五大要素图文介绍
2012/12/04 Javascript
原生javascript实现图片滚动、延时加载功能
2015/01/12 Javascript
js面向对象的写法
2016/02/19 Javascript
关于两个jQuery(js)特效冲突的bug的解决办法
2016/09/04 Javascript
jQuery实现别踩白块儿网页版小游戏
2017/01/18 Javascript
JQuery 获取多个select标签option的text内容(实例)
2017/09/07 jQuery
浅谈vue中.vue文件解析流程
2018/04/24 Javascript
记一次webpack3升级webpack4的踩坑经历
2018/06/12 Javascript
NestJs 静态目录配置详解
2019/03/12 Javascript
JS实现返回上一页并刷新页面的方法分析
2019/07/16 Javascript
js+css3实现炫酷时钟
2020/08/18 Javascript
JavaScript缓动动画函数的封装方法
2020/11/25 Javascript
k8s node节点重新加入master集群的实现
2021/02/22 Javascript
[01:55]2014DOTA2国际邀请赛 BBC正赛第一天总结
2014/07/10 DOTA
python中的多线程实例教程
2014/08/27 Python
Python中的自省(反射)详解
2015/06/02 Python
Python实现包含min函数的栈
2016/04/29 Python
深入分析python数据挖掘 Json结构分析
2018/04/21 Python
python二进制读写及特殊码同步实现详解
2019/10/11 Python
汽车驾驶求职信
2013/10/25 职场文书
情侣之间的道歉短信
2015/05/12 职场文书
青年干部培训班学习心得体会
2016/01/06 职场文书
详解redis在微服务领域的贡献
2021/10/16 Redis
mysql5.6主从搭建以及不同步问题详解
2021/12/04 MySQL