管道 - 状态管道
优质
小牛编辑
143浏览
2023-12-01
- 无状态管道是纯粹的功能,通过输入数据流动而不记住任何东西或引起可检测的副作用。 大多数管道是无状态的。 我们使用的CurrencyPipe和我们创建的长度管是无状态管的示例。
- 状态管道是能够管理它们转换的数据的状态的管道。 创建HTTP请求,存储响应并显示输出的管道是有状态的管道。 有状态管道应谨慎使用。
Angular 2提供 ,这是有状态的。
实现有状态管道
// naive implementation assumes small number increments
@Pipe({
name: 'animateNumber',
pure: false
})
private currentNumber: number = null; // intermediary number
private targetNumber: number = null;
transform(targetNumber: number): string {
if (targetNumber !== this.targetNumber) {
this.currentNumber = this.targetNumber || targetNumber;
this.targetNumber = targetNumber;
const difference = this.targetNumber - this.currentNumber
Observable.interval(100)
.subscribe(() => {
this.currentNumber++;
})
}
return this.currentNumber;
}