加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-17 17:50:16 所属栏目:安全 来源:网络整理
导读:我基于 Angular.io tutorial on pipes创建了一个简单的有状态管道: @Pipe({ name: 'fetch',pure: false})class FetchJsonPipe implements PipeTransform{ private fetchedValue = 'waiting'; private fetchedValue2 = 'waiting2'; transform(value:string,a
我基于 Angular.io tutorial on pipes创建了一个简单的有状态管道:

@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]
           })

我的问题是,我立即从#transform返回this.fetchedValue.
因为它只是一个字符串,所以它是按值返回的.稍后,当超时时
完成后,我只是将值’done’分配给一个属性(也是
私人的).

Angular2如何知道初始结果,“等待”不是最终结果?怎么样
它是否知道更新的值将通过#fetchedValue提供?
承诺根本没有暴露,Angular2没有关于名称的信息
我存储结果的字段.

唯一的线索就是纯粹的==假,我猜是指示它
观察实例的变化.但我不知道它是如何获得信息的
哪个领域值得关注.

但它的确有效!我不明白为什么.

干杯

解决方法

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

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

使用纯管道,只有当其中一个输入发生变化(即数据进入或args)时,AngularJS才会触发变化检测并重新评估管道.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读