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 与简单的全局状态对