Angular2 管道
1. 说明
管道用来转换模板显示的内容,应用程序中经常出现获取数据,转换数据,显示数据的逻辑。管道就是用来在转换数据阶段起作用的。主要存在两种类型的管道,pure pipe和impure pipe
2. Pure Pipe
Pure Pipe,stateless,关注于纯粹对象的变更,检测到输入值发生了 纯变更 时才会执行 纯管道 。 纯变更 是指对原始类型值 (String 、Number 、 Boolean 、 Symbol) 的更改, 或者对对象引用 (Date 、 Array 、 Function 、 Object) 的更改。针对复杂对象内部元素的变更不会影响到纯粹管道的执行。常见的内置管道
|
名称 |
用法 |
说明 |
|
CurrencyPipe |
expression | currency[:currencyCode[:symbolDisplay[:digitInfo]]] |
将数据转化为指定格式的金额格式输出 |
|
DatePipe |
expression | date[:format] |
将时间数据转换为指定格式的字符串 |
|
DecimalPipe |
expression | number[:digitInfo] |
将数据转化为指定格式的数据格式输出 |
|
LowerCasePipe |
expression | lowercase |
将数据转化为小写输出 |
|
UpperCasePipe |
expression | uppercase |
将数据转化为大写输出 |
|
JsonPipe |
expression | json |
将数据转化为json格式输出 |
|
SlicePipe |
expression | slice:start[:end] |
获取指定位置从start到end的数据 |
3. Impure Pipe
Impure Pipe,stateful,Angular 会在每个组件的变更检测周期中执行 非纯管道 。 非纯管道可能会被调用很多次,和每个按键或每次鼠标移动一样频繁。常见的内置非纯管道有
|
名称 |
用法 |
说明 |
|
AsyncPipe |
object | async |
接受一个 Promise 或 Observable 作为输入,并且自动订阅这个输入,最终返回它们给出的值 |
4. 如何使用
管道把数据作为输入,然后转换它,给出期望的输出。管道使用包括三个方面:
(1). 表达式语法的写法
(2). 如何参数设置
(3). 多个管道如何同时使用
从下面的例子可以很方便的看出来以上三个方面如何编写,
|
import { Component } from '@angular/core'; @Component({ moduleId: 'app', selector: 'app', template: ` <h5>your birthday is {{birthday | date:'MM/dd/yy' | uppercase}}</h5> `, }) export class AppComponent { birthday: Date = new Date(2012, 10, 10); } |
表达式的写法:在插值表达式中数据的右侧通过 管道操作符( | ) 及 右侧的管道函数 来表示
如何设置参数:在管道函数的后面添加一个冒号 ( : ) 再跟一个参数值,来为管道添加参数
多个管道同时使用:在插值表达式数据后面可以同时采用多个管道操作符( | ) 及 右侧的管道函数来表示多个管道,执行顺位为从左到右依次执行。
5. 自定义管道
我们来编写一个自定义管道,管道的含义是截取指定长度的字符串。
5.1 模块
首先我们引入对应的模块及函数Pipe
|
import { Pipe, PipeTransform } from '@angular/core'; |
5.2 注解
从@angular/core中导入Pipe及PipeTransform函数后,可以使用@ Pipe ()来标示组件类为一个Pipe,@标示注解的一种标识,用来普通类附加对应的元数据信息。
5.3 元数据
@Pipe将元数据的信息附加到类上,我们来了解一下常用的元数据信息都有哪些:
|
@Directive({ name: 'sub', pure: false }) |
name:管道的名称,表示在使用管道所采用的名称,例如 date等,
pure:布尔值,纯管道或者非纯管道
5.4 管道类
管道类包含实现数据转化的主要逻辑,管道类必须实现PipeTransform的transform的方法,在数据转化过程中会自动调用这个方法,并将结果返回。我们实现截取的管道类代码如下
|
export class SubPipe implements PipeTransform { transform(value: string, length: number): string { return value.substring(0, length); } } |
最后实现的代码如下:
|
import { Pipe, PipeTransform } from '@angular/core'; @Pipe({ name: 'sub', pure: false }) export class SubPipe implements PipeTransform { transform(value: string, length: number): string { return value.substring(0, length); } } |
Angular2 管道的更多相关文章
- ASP.NET MVC和Web API中的Angular2 - 第2部分
下载源码 内容 第1部分:Visual Studio 2017中的Angular2设置,基本CRUD应用程序,第三方模态弹出控件 第2部分:使用Angular2管道进行过滤/搜索,全局错误处理,调试客 ...
- ASP.NET MVC和Web API中的Angular2 - 第1部分
下载源码 - 903.5 KB 内容 第1部分:Visual Studio 2017中的Angular2设置,基本CRUD应用程序,第三方模态弹出控件 第2部分:使用Angular2管道进行过滤/搜索 ...
- Angular2之管道学习笔记
管道.可以把一个输出流与另一个输入流连接起来.类似 linux.gulp都有应用. 在Angular2中使用管道非常方便.Angular2中本身提供了一些内置管道.当然也可以自定义管道. 文档链接:h ...
- angular2的管道初体验
ng管道是应用里面比较重要的一个技术,他涉及很多功能 包括排序过滤 废话不说 直接上代码 新建个文件夹吧这个samplepipe.ts放进去 然后 你要做什么 在里面写管道代码 然后在app.modu ...
- [转]Angular2 使用管道Pipe以及自定义管道格式数据
本文转自:https://www.pocketdigi.com/20170209/1563.html 管道(Pipe)可以根据开发者的意愿将数据格式化,还可以多个管道串联. 纯管道(Pure Pipe ...
- angular2+ 自定义pipe管道实例--定义全局管道及使用
首先到项目目录下ng g pipe pipe/myslice 就会在app目录下生成一个pipe文件夹文件夹下有myslice.pipe.ts文件,如果没有也可以自己手动新建 然后需要再app.mod ...
- 使用Angular2+的内置管道格式化数据
在简书看到一篇关于Angualr运用内置管道格式化数据的总结,感觉挺实用的,转载一下以供参考: [转载]https://www.jianshu.com/p/a8bd5a1d2c53 PS:管道是在HT ...
- Angular2学习笔记——NgModule
在Angular2中一个Module指的是使用@NgModule修饰的class.@NgModule利用一个元数据对象来告诉Angular如何去编译和运行代码.一个模块内部可以包含组件.指令.管道,并 ...
- 浅谈angular2+ionic2
浅谈angular2+ionic2 前言: 不要用angular的语法去写angular2,有人说二者就像Java和JavaScript的区别. 1. 项目所用:angular2+ionic2 ...
随机推荐
- 当Table中td内容为空时,显示边框的办法
1. 在 table的css里面加: border-collapse:collapse;在 td 的css里面加: empty-cells:show; 2 .最简单的就是 在TD里写个 说明: ...
- Redis作为消息队列服务场景应用案例
NoSQL初探之人人都爱Redis:(3)使用Redis作为消息队列服务场景应用案例 一.消息队列场景简介 “消息”是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含文本字符串:也可以更 ...
- 如何修改Total Commander配件文件的位置
今天测试了一下Total Commander最新版的安装文件,测试完成后,并删除.结果导致原先一直在使用的绿色版的Total Comander配件文件变成了测试的配件文件,导致许多配置都丢失了,因此不 ...
- java画图之曲线拖动
目标:在窗体上按下鼠标按键.然后拖动鼠标,在按下和拖动之间绘制曲线 事件机制 事件源对象:窗体 事件监听方法:addMouseListener(MouseListener l);addMouseMot ...
- 【.NET】Nuget包,把自己的dll放在云端
//发布自己的nuget包,1.自己的api KEY,2.自己的类库,3.nuget打包工具https://npe.codeplex.com/releases/view/620126 ...
- 解决:Error: JAVA_HOME is not defined correctly
问题重现: Error: JAVA_HOME is not defined correctly. We cannot execute :/usr/lib/jvm/java-7-oracle 问题分析: ...
- HCTF时PHP WAF然有RLFI漏洞
tips:from菜鸡队长 这次去打HCTF决赛,用了这个自己写的WAF,web基本上没被打,被打的漏洞是文件包含漏洞,这个功能在本人这个waf里确实很是捉急,由于只是简单检测了..和php[35]{ ...
- 微信小程序之明源商城系列-01-商城介绍及开发准备
1,效果展示 数据来自于写的一个小爬虫爬了明源商城部分的数据.由于价格的保密性,下列产品价格和真实的都不同. 1.1 主页及开发文件结构 1.2 产品的详细页面 1.2 产品分类页面 1.3 产品 ...
- IO流 FileOutputSteam在fos.txt写出hello
package cn.idcast2; import java.io.FileNotFoundException; import java.io.FileOutputStream; import ja ...
- 轻松理解spring IOC
spring IOC(Inversion of control)即控制反转 概念:一,spring框架的核心之一 二,控制权由对象本身转向容器:由容器根据配置文件去创建实例并创建各个实例之间的依赖关系 ...