[转]Angular2 使用管道Pipe以及自定义管道格式数据

本文转自:https://www.pocketdigi.com/20170209/1563.html

 

管道(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管道,这个管道的功能是根据malefemale返回中文的
代码:

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> 

© 2017, 冰冻鱼. 请尊重作者劳动成果,复制转载保留本站链接! 应用开发笔记

转载于:https://www.cnblogs.com/freeliver54/p/9728309.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/570367.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决Ajax返回的json数据乱码问题

有以下两种方式&#xff1a; 直接设置编码格式&#xff1a; response.setCharacterEncoding("utf-8");设置客户端浏览器的html的编码格式&#xff1a;response.setContentType("text/html; charsetutf-8");

BRVAH(让RecyclerView变得更高效)(1)

本文来自网易云社区作者&#xff1a;吴思博对于RecyclerView&#xff0c; 我们重复编写着那一个又一个的列表界面&#xff0c;有的要分组&#xff0c;有的要添加广告头部、有的要不同类型item排列、等等需求&#xff0c;主要代码有大部分是重复的&#xff0c;如果有一个框架能够…

校验输入的两次密码是否一致的问题

使用jQuery框架中的validate插件&#xff0c;messages为提示信息。首先导入相应的js文件。 <script src"js/jquery-1.8.2.js"></script> <script src"js/jquery.validate.min.js"></script> <script src"js/messages_zh.…

MySQL自动备份shell脚本

在数据库的日常维护工作中&#xff0c;除了保证业务的正常运行以外&#xff0c;就是要对数据库进行备份&#xff0c;以免造成数据库的丢失&#xff0c;从而给企业带来重大经济损失。通常备份可以按照备份时数据库状态分为热备和冷备&#xff0c;按照备份数据库文件的大小分为增…

“==”和equals()的用法

equals()是java.lang.Object类的方法。 *对于字符串变量来说&#xff1a;”是比较两个对象在内存中的首地址&#xff1b;“equals()”是比较字符串中所包含的内容是否相同。 比如&#xff1a; String s1,s2,s3 "abc", s4 "abc" ; s1 new String("…

PyQt5菜单添加+事件+状态栏-7

1 from PyQt5.QtWidgets import QApplication,QMainWindow,QAction2 from PyQt5.QtGui import QIcon3 #demo_7:菜单添加action以及状态栏显示消息4 import sys5 class Example(QMainWindow):6 def __init__(self):7 self.app QApplication(sys.argv)8 sup…

git命令图片

转载于:https://www.cnblogs.com/duanwandao/p/9734074.html

怎么把JSP的参数:先传到JSP中,然后传给后台

第一种&#xff1a;可以在JSP中使用form表单&#xff0c;把参数放在input中hidden起来&#xff0c;然后在后台中取出来。代码如下&#xff1a; //前台jsp <form action"后台URL" method"post"><input style"display: none" name"…

Power Strings

题目连接 1 #include <stdio.h>2 #include <algorithm>3 #include <string.h>4 using namespace std;5 6 inline int read()7 {8 int x0,f1;char chgetchar();9 while(ch<0||ch>9){if(ch-)f-1;chgetchar();} 10 while(ch>0&&ch…

Content后台的获取为什么为空

在JSP页面中&#xff1a; <s:textarea placeholder"请输入正文" class"bookcontent" name"bookcontent"></s:textarea> 在后台需要获取数据&#xff1a; String bookcontent ServletActionContext.getRequest().getParameter(&q…

将vi打造成IDE

一.环境 发行版:Ubuntu 18.04 LTS 代号:bionic 内核版本:4.15.0-33-generic 二.步骤 2.1 准备工作 sudo apt-get install python3-pip clang cmake python2.7-dev -y pip3 install future frozendict 2.2 获取vundle git clone https://github.com/VundleVim/Vundle.vim.git ~…

解题: SDOI 2011 染色

题面 强行把序列问题通过树剖套在树上。。。算了算是回顾了一下树剖的思想。 每次树上跳的时候注意跳的同时维护当前拼出来的左右两条链的靠上的端点&#xff0c;然后拼起来的时候讨论一下拼接点&#xff0c;最后一下左右两边的端点都要考虑 1 #include<cstdio>2 #includ…

decode()、nvl()等用法详解

1、decode( 条件, if1, then1, if2, then2&#xff0c; 缺省值 )&#xff1a; 当条件 1时&#xff0c;则为1&#xff1b;else条件 2时&#xff1b;则为2&#xff1b;都不等时&#xff0c;为缺省值。 2、nvl&#xff08;a , b&#xff09;函数&#xff1a;如果a为NULL&#xf…

java.lang.OutOfMemoryError: PermGen space

使用Tomcat报java.lang.OutOfMemoryError: PermGen space错误时&#xff0c;这是tomcat的内存不够的原因&#xff0c;也就是tomcat的内存溢出。 这是我们只要在tomcat的配置下添加服务内存就可以了&#xff0c;添加内存方法&#xff0c;只要加入 -Xms256M -Xmx512M -XX:PermS…

js继承问题

JavaScript 继承问题 继承的发展史 传统形式 ----> 原型链 继承了父級的所有的属性&#xff08;原型链上的也会继承&#xff09;过多的继承了没有用的属性&#xff0c;代码冗余&#xff0c;执行效率低下子級无法向父級进行传参如果要给之級通过原型来添加属性和方法&#xf…

怎么把jad反编译放到Eclipse中

可以在CSDN下载页上进行下载哦&#xff0c;免费的哦&#xff0c;不要积分。 http://download.csdn.net/detail/farxix/9838195 我们把下载下来的jad资源包解压出来&#xff0c;如下图&#xff1a; 首先&#xff1a; 然后&#xff1a; 打开eclipse进行设置&#xff0…

一些很有意思的JS现象

关于JS对象的 . 和 [] []除了属性名可以比 .天马行空以外(比如我们要添加一个为33-abc的属性&#xff0c;一定得用[]))&#xff0c;还有一个实际操作中的区别 Object.is的作用和两个奇特的现象 还记得isNaN的作用&#xff0c;但有时候我们就想直接比较两个数据&#xff0c;总不…

怎么查看eclipse的版本号

在电脑上找到你安装eclipse的路径&#xff0c;找到readme点击打开&#xff0c;如下图所示&#xff1a; 查看版本号&#xff1a;

asp.net Page.Controls对象(找到所有服务器控件)

前台 复制代码 代码如下:<% Page Language"C#" AutoEventWireup"true" CodeFile"Default.aspx.cs" Inherits"_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3…

Vue2.0 脚手架代码详解

参考作者&#xff1a;https://www.jianshu.com/p/2b661d01eaf8 只是为了方便个人学习。 来看一下脚手架创建后的项目目录 说明&#xff1a;在*.vue文件&#xff0c;template标签里写html代码&#xff0c;且template直接子级只能有一个标签。style标签里写样式&#xff0c;scrip…