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 相关文章推荐
JQuery中dataGrid设置行的高度示例代码
Jan 03 Javascript
js获取UserControl内容为拼html时提供方便
Nov 02 Javascript
jQuery预加载图片常用方法
Jun 15 Javascript
jQuery如何使用自动触发事件trigger
Nov 29 Javascript
angularjs封装bootstrap时间插件datetimepicker
Jun 20 Javascript
如何用js实现鼠标向上滚动时浮动导航
Jul 18 Javascript
深入理解javascript函数参数与闭包
Dec 12 Javascript
JS实现复选框的全选和批量删除功能
Apr 05 Javascript
Vue封装的可编辑表格插件方法
Aug 28 Javascript
jQuery 判断元素是否存在然后按需加载内容的实现代码
Jan 16 jQuery
js获取本日、本周、本月的时间代码
Feb 01 Javascript
JavaScript使用setTimeout实现倒计时效果
Feb 19 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
PHP 反向排序和随机排序代码
2010/06/30 PHP
PHP文件读写操作相关函数总结
2014/11/18 PHP
php简单生成随机数的方法
2015/07/30 PHP
php_pdo 预处理语句详解
2016/11/21 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
2020/04/04 PHP
Extjs学习笔记之三 extjs form更多的表单项
2010/01/07 Javascript
javascript获取当前鼠标坐标的方法
2015/01/10 Javascript
Javascript中拼接大量字符串的方法
2015/02/05 Javascript
javascript实现模拟时钟的方法
2015/05/13 Javascript
浅谈javascript中基本包装类型
2015/06/03 Javascript
学习Angular中作用域需要注意的坑
2016/08/17 Javascript
BootStrap Validator使用注意事项(必看篇)
2016/09/28 Javascript
bootstrap实现二级下拉菜单效果
2017/11/23 Javascript
利用vue + element实现表格分页和前端搜索的方法
2017/12/25 Javascript
vue与vue-i18n结合实现后台数据的多语言切换方法
2018/03/08 Javascript
小程序二次贝塞尔曲线实现购物车商品曲线飞入效果
2019/01/07 Javascript
Vue axios 将传递的json数据转为form data的例子
2019/10/29 Javascript
vue商城中商品“筛选器”功能的实现代码
2020/07/01 Javascript
[01:35:13]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第一场 1月18日
2021/03/11 DOTA
Python操作MongoDB数据库PyMongo库使用方法
2015/04/27 Python
Python代码解决RenderView窗口not found问题
2016/08/28 Python
在pycharm 中添加运行参数的操作方法
2019/01/19 Python
django的settings中设置中文支持的实现
2019/04/28 Python
pymysql模块的使用(增删改查)详解
2019/09/09 Python
手动安装python3.6的操作过程详解
2020/01/13 Python
python构造函数init实例方法解析
2020/01/19 Python
新版Pycharm中Matplotlib不会弹出独立的显示窗口的问题
2020/06/02 Python
Django Session和Cookie分别实现记住用户登录状态操作
2020/07/02 Python
使用css如何制作时间ICON方法实践
2012/11/12 HTML / CSS
英国优质鞋类专家:Robinson’s Shoes
2017/12/08 全球购物
美国折衷生活方式品牌:Robert Graham
2018/07/13 全球购物
大学毕业生求职自荐书
2014/06/05 职场文书
学校党的群众路线教育实践活动对照检查材料
2014/09/24 职场文书
财务务虚会发言材料
2014/10/20 职场文书
SQLServer2008提示评估期已过解决方案
2021/04/12 SQL Server
box-shadow单边阴影的实现
2023/05/21 HTML / CSS