【问题标题】:Reuse pipe filter result for other element为其他元素重用管道过滤器结果
【发布时间】:2016-08-28 20:32:02
【问题描述】:

official angular2 pipes documentation的一个例子,不知是否可以实现如下:

    <div [hidden]="hasFlyingHeroes">
      <span>Heroes fly!</span>
    </div>
    <div *ngFor="let hero of (heroes | flyingHeroes)">
      {{hero.name}}
    </div>

其中“hasFlyingHeroes”使用过滤后的 ngFor 值,以免两次过滤掉 flyHeroes。

【问题讨论】:

    标签: angular angular2-pipe


    【解决方案1】:

    管道用于在不相关的数据之间共享共同行为。

    具有特定行为的数据片段可以表示为模型,

    @Injectable()
    class Heroes extends Array {
      getFlying() {
        return this.filter(hero => hero.canFly);
      }
    
      hasFlying() {
        return !!this.getFlying().length;
      }  
    }
    

    <div [hidden]="heroes.hasFlying()">
      <span>Heroes fly!</span>
    </div>
    <div *ngFor="let hero of heroes.getFlying()">
      {{hero.name}}
    </div>
    

    对于使用扩展数组表示的模型,调用getFlying 两次是正常的,因为它有多种修改方式,所以缓存过滤后的集合不会有任何好处。

    对于通过特定公共方法(例如add)严格修改的模型,可以使那里的缓存无效并缓存过滤后的集合,getFlying只会被调用一次。

    【讨论】:

      猜你喜欢
      • 2018-05-17
      • 1970-01-01
      • 1970-01-01
      • 2020-08-12
      • 2019-04-10
      • 1970-01-01
      • 1970-01-01
      • 2018-01-13
      • 2015-05-17
      相关资源
      最近更新 更多