【问题标题】:How do you create a local variable inside ngFor如何在 ngFor 中创建局部变量
【发布时间】:2017-02-06 21:16:52
【问题描述】:

如何获取*ngFor 中的类的快照以将时间/状态/​​人性化值保存在局部变量中?

例如,timer.remaining = timer.expires - Date.now()

<ion-card  class="timer" *ngFor="let timer of timers"> 
  <ion-card-content>
    <ion-card-title>{{timer.humanize(timer.remaining) }}</ion-card-title>
    <div class="card-subtitle">{{timer.label}}</div>
  </ion-card-content>
  <ion-note>remaining: {{timer.remaining/1000}}</ion-note>
  <button ion-button block icon-left 
    [color]="lookup[timer.state].color" 
    (click)="timerClick(timer)"
  >
    <ion-icon [name]="lookup[timer.state].icon" ></ion-icon>
    {{timer.label}}
  </button>
</ion-card>

我想在ngFor 中调用一次timer.snapshot() 以获取所有显示属性。

解决方案:

谢谢,我用管道转换了Timers,然后将其推入*ngFor

// Pipe
@Pipe({name: 'toJSON', pure: false})
export class ToJsonPipe implements PipeTransform {
  transform(value: any| Array<any>): any | Array<any> { 
    let unwrap = false;
    if (!Array.isArray(value)) {
      value = [value];
      unwrap = true;
    }
    const result = value.map( (o)=>{
      if (o && o.toJSON) return o.toJSON(); 
      else return {};
    })
    return unwrap ? result[0] : result;
  }
}



// html template
<ion-card  class="timer" *ngFor="let timer of timers | toJSON "> 

【问题讨论】:

  • 最好的方法是创建管道,它会为你计算剩余时间。我认为,所有其他方法都是黑客攻击。

标签: angular ionic2


【解决方案1】:

您应该在组件类或服务中创建要与*ngFor 一起使用的值数组,然后使用*ngFor 绑定到该数组,而不是将逻辑放入*ngFor 本身。 可能会有一些 hack,但它们通常在 Angulars 更改检测方面效果不佳,并且可能会严重损害您的组件性能。

【讨论】:

  • 我使用了上面的解决方案,它有点工作。但是,SimpleChange 没有正确存储previousValue,它始终是{}。这可能是由于从管道返回匿名对象引起的,但我不知道解决方案。见:stackoverflow.com/questions/42134483/…
  • 我在您的问题中找不到任何关于 SimpleChange 的信息。
  • 不在这个问题中,但是创建对象数组的解决方案解决了ngFor 问题,但是当您要将组件attr 绑定到ngFor 模板输入变量时会产生另一个问题。变化检测循环不能干净地处理它。
  • 我想最好用代码创建一个新问题,演示您尝试完成什么以及遇到什么问题。
  • 在评论中做到了。只是想问你是否遇到过这个问题。我不能成为第一个...
猜你喜欢
  • 2016-05-17
  • 1970-01-01
  • 1970-01-01
  • 2011-01-05
  • 1970-01-01
  • 2013-09-04
  • 1970-01-01
  • 2012-09-08
  • 2023-04-07
相关资源
最近更新 更多