【Angular】管道

2021/09/09 09:41:16

语法

<p>{{ name | UpperCasePipe }}</p>
  • 管道传参

紧跟在管道名称( currency )后面的是冒号(:)和参数值('EUR')。

多参时用冒号分隔

<p>{{ price | currency:'EUR' }}</p>
  • 串联管道

多个管道串联时从左往右执行

<p>{{ birthday | date | uppercase}}</p>

自定义管道

  • 创建管道文件 exponential-strength.pipe.ts
import { Pipe, PipeTransform } from "@angular/core";

@Pipe({ name: "exponentialStrength" })
export class ExponentialStrengthPipe implements PipeTransform {
  transform(value: number, exponent?: number): number {
    return Math.pow(value, isNaN(exponent) ? 1 : exponent);
  }
}
  • 使用管道
<p>{{ 2 | exponentialStrength: 10 }}</p>

引用类型值

默认情况下管道会定义成纯的(pure),这样 Angular 只有在检测到输入值发生了纯变更时才会执行该管道。纯变更是对原始输入值(比如 String、Number、Boolean 或 Symbol )的变更,或是对对象引用的变更(比如 Date、Array、Function、Object)。

  • 用新对象替换旧对象 修改对象的 引用 来触发变更检测

  • 使用非纯的管道

在装饰器中将 pure 属性设置为 false ,对象内的属性发生变化时就会触发管道执行

@Pipe({
  name: 'flyingHeroesImpure',
  pure: false
})