angular2如何检测有状态管道中的变化?

服务

我根据有关管道的Angular.io教程创建了一个简单的有状态管道

@Pipe({
    name: 'fetch',
    pure: false
})

class FetchJsonPipe  implements PipeTransform{
    private fetchedValue = 'waiting';
    private fetchedValue2 = 'waiting2';

    transform(value:string, args:string[]):any {
        setTimeout(() => {
            this.fetchedValue = 'done';
            this.fetchedValue2 = 'done2';
        }, 3000);
        return this.fetchedValue2;
    }
}

@Component({ selector: 'sd-splash'
           , template: 'hello ng2 {{ "5" | fetch }}'
           , pipes: [FetchJsonPipe]
           })

我的问题是,我回来this.fetchedValue#transform马上。由于它只是一个字符串,因此按value返回稍后,当超时结束时,我只是将值分配'done'给一个属性(也是私有的)。

Angular2如何知道初始结果'waiting'不是最终的?它怎么知道更新的值将通过#fetchedValuepromise根本没有公开,并且Angular2没有关于我将结果存储在其中的字段名称的信息。

它唯一的线索是pure == false,我猜它指示它监视实例的更改。但我看不到它如何提供有关要监视的字段的信息

但这有效!而且我不知道为什么。

干杯

像素位

Angular setTimeout()Monkey使用称为Zone.js的库修补了浏览器事件(包括)。当事件发生时,AngularJS触发更改检测。

对于有状态管道,AngularJS将在每个事件上重新评估管道,因为即使使用相同的输入,管道结果也可能发生变化。

使用纯管道时,AngularJS仅在其中一个输入发生变化(即输入数据或args)时,才会触发变更检测并重新评估管道。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

角度2:如何检测阵列中的变化?(@input属性)

如何检测在Angular2中导航的用户?

Angular 2中的元素高度和宽度变化检测

如何在Angular中检测路线变化?

检查后错误值已更改(Angular2中的有状态管道)

如何使用Angular2中的Date对象检测更改?

检测Angular2中数组内部对象的变化

调整大小div上的angular2变化检测

侦听Angular2 / Typescript中对象字段的变化

如何以正确的方式检测/观察angular2形式的“脏状态”?

如何在Angular2中检测div的中间点击?

在角度2中,如何检测路线变化

带有数组突变的Angular2 ngFor OnPush变化检测

带有可观察对象的Angular 2变化检测

Angular2 OnPush变化检测和ngFor

在angular2中具有动态货币变量的货币管道

如何降级用angular2编写的自定义管道以在angular 1.5中使用?

检测元素是否在Angular2中具有焦点

ngFor Angular2中的动态管道

您如何识别Angular2中触发变化检测的一轮触发事件(调试ngDoCheck无限循环)?

反应如何检测状态/道具的变化?

Angular2:如何触发变更检测?

有没有办法在Angular2中进行“输入转换”(与管道相反)?

如何观察angular2的变化?

在Angular2中,如何检测到过滤器/管道未返回任何结果

孩子没有检测到父母的变化Angular 2

如何检测Angular2中的路径

检测 Angular2 内部组件的变化?

Angular:如何检测当前组件中的路由变化?