【发布时间】:2019-03-04 19:36:27
【问题描述】:
作为 Angular 的初学者,我遇到了纯管道
- a) 仅在检测到输入值发生纯粹更改时执行。
- b) 纯粹的更改是对原始输入值的更改
(字符串、数字、布尔值)或更改的对象引用(数组、日期、 函数、对象)。 - c) 如果管道的输入是纯管道,则不执行纯管道 对象,并且只有该对象的属性值会更改,但不会更改 参考。
我很清楚对象引用部分,问题在于原始类型。
一个关键的事实在于使用纯管道进行优化
Angular 只有在收到与之前调用不同的参数时才会评估给定的纯管道调用。
我尝试了一个例子:
applypure.pipe.ts
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'applypure',
pure: true
})
export class ApplypurePipe implements PipeTransform {
count = 0;
constructor() {
// To determine an instance is created
console.log('pipe created:');
}
transform(value: number, exponent: number): number {
//this.count++;
console.log(value);
return Math.pow(value, exponent);;
}
}
app.component.ts
import { Component } from '@angular/core';
@Component({
selector: 'my-app',
template: `
{{12 | applypure : 2}}
{{12 | applypure: 2 }}
`
})
export class AppComponent {
}
}
结果如下图:
相同的输入被立即传递给纯管道,但它的变换方法被调用了两次。它不应该跳过重新评估吗?请澄清。
【问题讨论】:
-
状态
pure是每个管道。它与传入的值有关,如果您多次使用该管道,则不会重用。它在a)中这么说。 -
@Silvermind;你能详细说明一下(一个例子)吗?
-
@jason 如果您查看日志管道仅创建一次并且在管道处理相同输入时重复使用相同的管道,则将根据管道使用情况调用转换
-
@Vishnu:管道实例的创建和执行是不同的 IMO。
-
@Jason,纯管道会记住上次输入以进行更改检测。
标签: angular angular-pipe