当前位置: 首页 > 编程笔记 >

Angular 2 有状态管道

龚俭
2023-03-14
本文向大家介绍Angular 2 有状态管道,包括了Angular 2 有状态管道的使用技巧和注意事项,需要的朋友参考一下

示例

Angular 2提供了两种不同类型的管道-无状态管道和有状态管道。默认情况下,管道是无状态的。但是,我们可以通过将pure属性设置为来实现有状态管道false。如您在参数部分所看到的,您可以指定aname并声明管道是否应为纯管道,这意味着有状态或无状态。尽管数据流经一个不会记住任何内容的无状态管道(这是一个纯函数),可以通过有状态管道来管理和记住数据。有状态管道的一个很好的例子AsyncPipe是Angular 2提供的。

重要

请注意,大多数管道应属于无状态管道类别。由于性能原因,这一点很重要,因为Angular可以为变更检测器优化无状态管道。因此,请谨慎使用有状态管道。通常,与Angular 1.x中的过滤器相比,Angular 2中的管道优化具有重大的性能增强。在Angular 1中,即使数据完全没有变化,摘要循环也总是必须重新运行所有过滤器。在Angular 2中,一旦计算出管道的值,变化检测器就知道除非输入发生变化,否则不会再次运行该管道。

有状态管道的实现

import {Pipe, PipeTransform, OnDestroy} from '@angular/core';

@Pipe({
  name: 'countdown',
  pure: false
})
export class CountdownPipe implements PipeTransform, OnDestroy  {
  private interval: any;
  private remainingTime: number;

  transform(value: number, interval: number = 1000): number {
    if (!parseInt(value, 10)) {
      return null;
    }
    
    if (typeofthis.remainingTime!== 'number') {
     this.remainingTime= parseInt(value, 10);
    }
    
    if (!this.interval) {
     this.interval= setInterval(() => {
        this.remainingTime--;
        
        if (this.remainingTime <= 0) {
         this.remainingTime= 0;
          clearInterval(this.interval);
          delete this.interval;
        }
      }, interval);
    }
    
    return this.remainingTime;
  }
  
  ngOnDestroy(): void {
    if (this.interval) {
      clearInterval(this.interval);
    }
  }
}

然后,您可以照常使用管道:

{{ 1000 | countdown:50 }}
{{ 300 | countdown }}

重要的是您的管道还必须实现该OnDestroy接口,以便一旦管道被破坏就可以清理。在上面的示例中,有必要清除间隔以避免内存泄漏

 类似资料:
  • 无状态管道是纯粹的功能,通过输入数据流动而不记住任何东西或引起可检测的副作用。 大多数管道是无状态的。 我们使用的CurrencyPipe和我们创建的长度管是无状态管的示例。 状态管道是能够管理它们转换的数据的状态的管道。 创建HTTP请求,存储响应并显示输出的管道是有状态的管道。 有状态管道应谨慎使用。 Angular 2提供 ,这是有状态的。 View Example 实现有状态管道 // n

  • 来自服务器的数据以及是否挂起或导致错误 UI状态如切换,警报和错误消息 自定义主题,凭据和本地化 许多其他类型的状态 Redux using ng2-redux Angular Services and RxJS(推荐)

  • 管理应用程序状态是个难题。您需要在多个后端,Web workers和UI组件之间进行协调。 像Redux和Flux这样的模式旨在通过使这种协调更加明确来解决这个问题。在本文中,我将展示如何使用RxJS在几行代码中实现类似的模式。然后我将展示如何使用这种模式来实现一个简单的Angular 2应用。 在谈论架构模式时,我喜欢从描述其核心属性开始。你可以写在餐巾背上的东西。The devil, of c

  • 建议使用基于redux封装出来的rematch, anujs也自带了这个框架。 rematch的官网 https://github.com/rematch/rematch resolve: { alias: { react: "anujs", "react-dom": "anujs", rematch: "anujs/dist/Rematch.js

  • 属性是用于标识您的应用程序的操作的唯一字符串。 使用lisp-case(例如)是一个常见的惯例,但是只要在整个项目中是一致的,您可以随意使用任何写法。 示例: 为了简化操作创建,您可以创建一个工厂函数来处理应用程序中重复的部分: 由此产生的创建操作变得更加简洁和干净:

  • Mpx 参考 vuex 设计实现了外部状态管理系统(store),其中的概念与 api 与 vuex 保持一致,为了更好地支持状态模块管理和跨团队合作场景,我们提出多实例 store 作为 vuex 中 modules 的替代方案,该方案在模块拆分及合并上的灵活性远高于 modules。 介绍 Store 是一个全局状态管理容器,能够轻松实现复杂场景下的组件通信需求,store 与简单的全局状态对