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 valueOf 使用方法
Dec 28 Javascript
JavaScript的eval JSON object问题
Nov 15 Javascript
js 实现复制到粘贴板的功能代码
May 13 Javascript
javaScript让文本框内的最后一个文字的后面获得焦点实现代码
Jan 06 Javascript
微信小程序 欢迎界面开发的实例详解
Nov 30 Javascript
解决webpack打包速度慢的解决办法汇总
Jul 06 Javascript
Express使用html模板的详细代码
Sep 18 Javascript
简单实现vue验证码60秒倒计时功能
Oct 11 Javascript
详解vue静态资源打包中的坑与解决方案
Feb 05 Javascript
angular6.0使用教程之父组件通过url传递id给子组件的方法
Jun 30 Javascript
Vue路由history模式解决404问题的几种方法
Sep 29 Javascript
使用vue-cli3+typescript的项目模板创建工程的教程
Feb 28 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
服务器端解压缩zip的脚本
2006/12/22 PHP
php5 apache 2.2 webservice 创建与配置(java)
2011/01/27 PHP
php上传图片到指定位置路径保存到数据库的具体实现
2013/12/30 PHP
php解析xml方法实例详解
2015/05/12 PHP
PHP批量去除BOM头代码分享
2015/06/26 PHP
Laravel实现构造函数自动依赖注入的方法
2016/03/16 PHP
浅谈jQuery中 wrap() wrapAll() 与 wrapInner()的差异
2014/11/12 Javascript
JS实现的颜色实时渐变效果完整实例
2016/03/25 Javascript
JavaScript 身份证号有效验证详解及实例代码
2016/10/20 Javascript
微信小程序 页面传值详解
2017/03/10 Javascript
JavaScript用二分法查找数据的实例代码
2017/06/17 Javascript
Node.js中sequelize时区的配置方法
2017/12/10 Javascript
详解html-webpack-plugin用法全解
2018/01/22 Javascript
详解微信小程序调起键盘性能优化
2018/07/24 Javascript
使用elementUI实现将图片上传到本地的示例
2018/09/04 Javascript
详解如何使用node.js的开发框架express创建一个web应用
2018/12/20 Javascript
js使用cookie实现记住用户名功能示例
2019/06/13 Javascript
JS前端知识点offset,scroll,client,冒泡,事件对象的应用整理总结
2019/06/27 Javascript
使用p5.js临摹动态图形
2019/10/23 Javascript
Python算法之栈(stack)的实现
2014/08/18 Python
python实现的简单抽奖系统实例
2015/05/22 Python
使用python实现生成用户信息
2017/03/20 Python
PyQt5实现从主窗口打开子窗口的方法
2019/06/19 Python
CSS3实现多背景展示效果通过CSS3定位多张背景
2014/08/10 HTML / CSS
Html5 APP中监听返回事件处理的方法示例
2018/03/15 HTML / CSS
Sneaker Studio匈牙利:购买运动鞋
2018/03/26 全球购物
西班牙在线光学:Visual-Click
2020/06/22 全球购物
模特职业生涯规划范文
2014/02/26 职场文书
影子教师研修方案
2014/06/14 职场文书
大学活动总结模板
2014/07/10 职场文书
我为党旗添光彩演讲稿
2014/09/13 职场文书
群众路线自我剖析及整改措施
2014/11/04 职场文书
小学国庆节活动总结
2015/03/23 职场文书
2015年“公民道德宣传日”活动方案
2015/05/06 职场文书
办公经费申请报告
2015/05/15 职场文书
Python 全局空间和局部空间
2022/04/06 Python