Angular-05:管道

  • [① 介绍](#① 介绍)
    • [1.1 基本用法](#1.1 基本用法)
    • [1.2 管道参数](#1.2 管道参数)
    • [1.3 链式管道](#1.3 链式管道)
    • [1.4 纯管道](#1.4 纯管道)
    • [1.5 非纯管道](#1.5 非纯管道)
  • [② 内置管道](#② 内置管道)
  • ③自定义管道

① 介绍

  1. 管道:pipe 。在angular中处理组件模板的数据格式。
  2. 管道操作符 | ,连接模板表达式中左边输入数据和右边的管道。

1.1 基本用法

例:这里使用了内置管道 date 对日期的显示做了美化

html 复制代码
<P>my birthday is {{birthday}}</P>   <!-- my birthday is Mon Feb 01 1993 00:00:00 GMT+0800 (中国标准时间) -->
<p>my birthday is {{ birthday | date }}</p>   <!-- my birthday is Feb 1, 1993 -->
ts 复制代码
birthday = new Date(1993,1,1);

1.2 管道参数

html 复制代码
<P>my birthday is {{birthday | date:"y-MM-dd EEEE"}}</P>  <!-- my birthday is 1993-02-01 Monday -->
<P>my birthday is {{birthday | date:"y/MM/dd EEEE"}}</P>  <!-- my birthday is 1993/02/01 Monday -->
ts 复制代码
birthday = new Date(1993,1,1);

1.3 链式管道

一个模板表达式中可以连续使用多个管道进行不同的处理。

html 复制代码
<P>my birthday is {{birthday | pipeName1 | pipeName2 | pipeName3}}</P>

模板表达式的值"birthday",通过管道pipeName1处理后在传递给pipeName2处理,一直到最后一个管道处理完毕,就输出链式管道处理的最终结果。

1.4 纯管道

  1. angular管道有两种变化检测机制,分别对应两种类型:纯管道和非纯管道。
  2. 默认为纯管道。
  3. 只有在检测到输入值发生纯变更时才会调用纯管道的transform() 方法来实现数据转换,在将数据更新到页面上。
  4. 纯变更:基本数据类型输入值的变更或对象引用的更改。(对象的引用检测方式比遍历对象内部所有属性值要快的多,angular使用的是对象引用的监测策略)

1.5 非纯管道

  1. angular管道有两种变化检测机制,分别对应两种类型:纯管道和非纯管道。
  2. 使用非纯管道,angular组件在每个变化监测周期都会调用非纯管道,并执行管道的transform() 方法来更新页面数据。
  3. 通过在管道元数据里将pure属性值设置为false来定义非纯管道
ts 复制代码
@Pipe({
  name: 'test-pipe',
  pure: false
})

② 内置管道

内置管道列举

序号 管道名 类型 说明
1 Date 纯管道 日期管道,格式化日期
2 Json 非纯管道 将输入数据对象经过JSON.stringify()方法转换后输出对象字符串
3 UpperCase 纯管道 将文本所有小写字母转成大写字母
4 LowerCase 纯管道 将文本所有大写字母转成小写字母
5 Decimal 纯管道 数值处理
6 Currency 纯管道 数值转成货币格式
7 Percent 纯管道 数值转成百分比格式
8 Slice 非纯管道 数组或字符串裁剪

③自定义管道

需求:

  1. 指定字符串不能超过规定长度,文字的长度超过规定的长度会被裁剪,并且显示...(省略号)
  2. 规定长度由管道参数决定
  3. substr() 语法: string.substr(start,length)。指定的是字符串的开始位置和长度

举例:

  1. 在页面上使用指令限制最多显示5个字,多余的截断并显示省略号。

定义管道:clipString

ts 复制代码
@Pipe({
  name: 'clipString'
})
export class ClipStringPipe implements PipeTransform {

  transform(value: string, limit: number): any {
    if (!value) return null;

    if (value.length > limit) {
      return value.substr(0, limit) + "...";
    }

  }

}

组件模板中的应用

html 复制代码
<p>{{'今天是星期六呢' | clipString:6}}</p>

需要在declarations中声明

ts 复制代码
@NgModule({
  imports: [
    CommonModule
  ],
  declarations: [
    ClipStringPipe
  ],
  exports: [SonComponent]
})
export class SonModule { }
相关推荐
ziyu_jia3 天前
Angular 中获取 DOM 节点的几种方法
前端·javascript·angular
大模型铲屎官16 天前
前端框架中 HTML 的应用技巧:React、Vue、Angular 深度解析
react.js·前端框架·vue·html·编程·html5·angular
KenkoTech1 个月前
Angular由一个bug说起之十三:Cross Origin
angular
时光匆匆岁月荏苒,转眼我们已不是当年2 个月前
【ANGULAR网站开发】初始环境搭建
angular
langzitianya2 个月前
XMLHttpRequest接受chunked编码传输的HTTP Response时有问题
vue·xmlhttprequest·angular·chunked·流式
KenkoTech2 个月前
Angular由一个bug说起之十二:网页页面持续占用CPU过高
angular
张某人的胡思乱想2 个月前
angular19-官方教程学习
学习·angular
KenkoTech2 个月前
Angular由一个bug说起之十一:排序之后无法展开 Row
angular
余生H3 个月前
Angular v19 (三):增量水合特性详解 - 什么是水合过程?有哪些应用场景?与 Qwik 相比谁更胜一筹?- 哪个技术好我就学哪个,这就是吸心大法吧
前端·javascript·angular·ssr·前端优化·qwik
crary,记忆3 个月前
Angular中的ngOnchange()的汇总
前端·javascript·学习·angular