管道 - 状态管道

优质
小牛编辑
143浏览
2023-12-01
  • 无状态管道是纯粹的功能,通过输入数据流动而不记住任何东西或引起可检测的副作用。 大多数管道是无状态的。 我们使用的CurrencyPipe和我们创建的长度管是无状态管的示例。
  • 状态管道是能够管理它们转换的数据的状态的管道。 创建HTTP请求,存储响应并显示输出的管道是有状态的管道。 有状态管道应谨慎使用。

Angular 2提供 ,这是有状态的。

View Example

实现有状态管道

  1. // naive implementation assumes small number increments
  2. @Pipe({
  3. name: 'animateNumber',
  4. pure: false
  5. })
  6. private currentNumber: number = null; // intermediary number
  7. private targetNumber: number = null;
  8. transform(targetNumber: number): string {
  9. if (targetNumber !== this.targetNumber) {
  10. this.currentNumber = this.targetNumber || targetNumber;
  11. this.targetNumber = targetNumber;
  12. const difference = this.targetNumber - this.currentNumber
  13. Observable.interval(100)
  14. .subscribe(() => {
  15. this.currentNumber++;
  16. })
  17. }
  18. return this.currentNumber;
  19. }

View Example