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的跨域调用文件
Nov 19 Javascript
javascript+xml实现简单图片轮换(只支持IE)
Dec 23 Javascript
jQuery动画与特效详解
Feb 01 Javascript
javascript基础知识分享之类与函数化
Feb 13 Javascript
基于vuejs+webpack的日期选择插件
May 21 Javascript
JS检测数组类型的方法小结
Mar 14 Javascript
Angular动态添加、删除输入框并计算值实例代码
Mar 29 Javascript
vue中如何引入jQuery和Bootstrap
Apr 10 jQuery
不得不看之JavaScript构造函数及new运算符
Aug 21 Javascript
详解如何webpack使用DllPlugin
Sep 30 Javascript
说说Vuex的getters属性的具体用法
Apr 15 Javascript
使用JavaScript通过前端发送电子邮件
May 22 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中filter函数验证、过滤用户输入的数据
2014/01/13 PHP
使用php-timeit估计php函数的执行时间
2015/09/06 PHP
PHP 读取文本文件内容并分页显示
2016/01/02 PHP
php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法
2016/10/12 PHP
PHP合并两个或多个数组的方法
2019/01/20 PHP
Mac下关于PHP环境和扩展的安装详解
2019/10/17 PHP
PHP实现长轮询消息实时推送功能代码实例讲解
2021/02/26 PHP
jQuery获取地址栏参数插件(模仿C#)
2010/10/26 Javascript
js 中的switch表达式使用示例
2020/06/03 Javascript
jQuery focus和blur事件的应用详解
2014/01/26 Javascript
jquery实现可自动收缩的TAB网页选项卡代码
2015/09/06 Javascript
浅析jQuery 遍历函数,javascript中的each遍历
2016/05/25 Javascript
javascript insertAfter()定义与用法示例
2016/07/25 Javascript
JavaScript中Array对象用法实例总结
2016/11/29 Javascript
使用jQuery实现两个div中按钮互换位置的实例代码
2017/09/21 jQuery
mockjs,json-server一起搭建前端通用的数据模拟框架教程
2017/12/18 Javascript
Node.js操作系统OS模块用法分析
2019/01/04 Javascript
vue-mugen-scroll组件实现pc端滚动刷新
2019/08/16 Javascript
Vue替代marquee标签超出宽度文字横向滚动效果
2019/12/09 Javascript
原生js实现碰撞检测
2020/03/12 Javascript
[37:45]完美世界DOTA2联赛PWL S3 LBZS vs Phoenix 第二场 12.09
2020/12/11 DOTA
python中解析json格式文件的方法示例
2017/05/03 Python
Python常用内置模块之xml模块(详解)
2017/05/23 Python
对Xpath 获取子标签下所有文本的方法详解
2019/01/02 Python
PyCharm安装Markdown插件的两种方法
2019/06/24 Python
python爬虫 2019中国好声音评论爬取过程解析
2019/08/26 Python
给大家整理了19个pythonic的编程习惯(小结)
2019/09/25 Python
python数据处理——对pandas进行数据变频或插值实例
2020/04/22 Python
Keras 快速解决OOM超内存的问题
2020/06/11 Python
值得收藏的HTML5资源(学习html5的朋友可以收藏下)
2010/07/20 HTML / CSS
韩都衣舍天猫官方旗舰店:天猫女装销售总冠军
2017/10/10 全球购物
经济信息系毕业生自荐信
2014/06/02 职场文书
2014幼儿园小班工作总结
2014/11/10 职场文书
生死牛玉儒观后感
2015/06/11 职场文书
MySQL和Oracle批量插入SQL的通用写法示例
2021/11/17 MySQL
MySQL实现用逗号进行拼接、以逗号进行分割
2022/12/24 MySQL