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学习笔记(十) js对象 继承
Jun 19 Javascript
基于jquery的bankInput银行卡账号格式化
Aug 22 Javascript
解决js正则匹配换行问题实现代码
Dec 10 Javascript
JavaScript将Table导出到Excel实现思路及代码
Mar 13 Javascript
JS实现点击链接取消跳转效果的方法
Jan 24 Javascript
使用javascript做的一个随机点名程序
Feb 13 Javascript
jQuery插件实现无缝滚动特效
Nov 24 Javascript
BootStrap响应式导航条实例介绍
May 06 Javascript
JavaScript中的对象和原型(一)
Aug 12 Javascript
jQuery表单验证之密码确认
May 22 jQuery
jQuery实现动态添加和删除input框实例代码
Mar 26 jQuery
Vue ECharts实现机舱座位选择展示功能
May 15 Vue.js
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
PHP生成便于打印的网页
2006/10/09 PHP
php数组一对一替换实现代码
2012/08/31 PHP
从零开始学YII2框架(三)扩展插件yii2-gird
2014/08/20 PHP
PHP设计模式之观察者模式实例
2016/02/22 PHP
PHP获取表单数据与HTML嵌入PHP脚本的实现
2017/02/09 PHP
List Information About the Binary Files Used by an Application
2007/06/18 Javascript
jQuery与其它库冲突的解决方法
2010/06/25 Javascript
ExtJs 表单提交登陆实现代码
2010/08/19 Javascript
javascript 动态创建表格的2种方法总结
2015/03/04 Javascript
简单实现js选项卡切换效果
2016/02/03 Javascript
JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍
2016/05/19 Javascript
浅谈JS正则表达式的RegExp对象和括号的使用
2016/07/28 Javascript
vue图片加载与显示默认图片实例代码
2017/03/16 Javascript
vue内置指令详解
2018/04/03 Javascript
jQuery实现的淡入淡出与滑入滑出效果示例
2018/04/18 jQuery
angular4中引入echarts的方法示例
2019/01/29 Javascript
vue实现微信二次分享以及自定义分享的示例
2019/03/20 Javascript
JS实现简单的文字无缝上下滚动功能示例
2019/06/22 Javascript
js中关于Blob对象的介绍与使用
2019/11/29 Javascript
js实现二级联动简单实例
2020/01/11 Javascript
python获取当前时间对应unix时间戳的方法
2015/05/15 Python
Python 制作糗事百科爬虫实例
2016/09/22 Python
如何利用Boost.Python实现Python C/C++混合编程详解
2018/11/08 Python
Python使用requests提交HTTP表单的方法
2018/12/26 Python
python中报错&quot;json.decoder.JSONDecodeError: Expecting value:&quot;的解决
2019/04/29 Python
python使用pygame实现笑脸乒乓球弹珠球游戏
2019/11/25 Python
python中文分词库jieba使用方法详解
2020/02/11 Python
PUMA澳大利亚官方网站:德国运动品牌
2018/10/19 全球购物
汽车专业学生自我评价
2014/01/19 职场文书
教师远程培训感言
2014/03/06 职场文书
六一节目主持词
2014/04/01 职场文书
建议书格式
2015/02/04 职场文书
小学班主任工作总结2015
2015/04/07 职场文书
汽车销售助理岗位职责
2015/04/14 职场文书
员工手册编写范本
2015/05/14 职场文书
2016年社区服务活动总结
2016/04/06 职场文书