【问题标题】:angular2/javascript - NgFor looping through array inside of objectangular2/javascript - NgFor 循环遍历对象内部的数组
【发布时间】:2017-06-08 12:04:35
【问题描述】:

我有自己的对象,其中包含使用 ngFor 循环的数据。但是对象中有一个数组部分,我也想在 <li></li> 中循环遍历它

目前它看起来像这样。但是我不想在一个<li></li> 中包含完整的字符串,我只想要一个数组。

相关代码:

tier.model

export class Tier {
  constructor (
    public id: number,
    public title: string,
    public rewards: any[],
    public price: number
  )
  {}
}

组件:

export class PackagesComponent {  //will be renamed to TierComponent
  public tierToEdit: Tier;
  editMode = false;
  tiers: Tier[] = [
    new Tier(
      10,
      'First Tier',
      ['Server access - Simple', 'Win something small', 'and so on'],
      5.00),
    new Tier(
      11,
      'Second Tier',
      ['Server access - Standard', 'Win something medium', 'and so on and on'],
      10.00),
    new Tier(
      12,
      'Third Tier',
      ['Server access - Advanced', 'Win something big', 'and so on and on and on'],
      10.00)
  ]

模板:

<div class="row">
  <div  class="col-md-4" *ngFor="let tier of tiers; let i=index;">
    <ul class="pricing-table">
      <li class="plan-name">
        {{ tier.title }}
      </li>
      <li *ngFor="let reward of tiers">
        {{ reward.rewards }}
      </li>
      <p class="plan-price">{{ tier.price }}</p>
      <li class="plan-action">
        <a class="btn btn-primary" (click)="onEdit(tier)">Edit</a>
        <a class="btn btn-success" (click)="this.clickSave()">SaveYes</a>
        <a class="btn btn-warning" >Get</a>
      </li>
    </ul>

最后应该是这样的:

我尝试过的其他方法是:

<div  class="col-md-4" *ngFor="let tier of tiers; let i=index;">
    <!-- Show Mode -->
    <ul *ngIf="!editMode || tierToEdit != tier" class="pricing-table">
      <li class="plan-name">
        {{ tier.title }}
      </li>
      <li *ngFor="let reward of tiers; let i=index">
        {{ reward.rewards[i] }}
      </li>

这比给了我第一个数组的第一个元素,第二个数组的第二个元素和第三个数组的第三个元素:

希望这不会让人感到困惑,对于 angular/javascript 来说还是很陌生,很抱歉可能会提出愚蠢的问题或使用错误的术语 :) 非常感谢!

【问题讨论】:

  • 请创建一个 plnkr 或小提琴。

标签: javascript arrays angular angular2-template


【解决方案1】:

您还需要迭代第二个*ngFor 中的嵌套数组,例如:

 <div class="row">
   <div  class="col-md-4" *ngFor="let tier of tiers; let i=index;">
    <ul class="pricing-table">
      <li class="plan-name">
        {{ tier.title }}
      </li>
      <li *ngFor="let reward of tier.rewards">
        {{reward}}
      </li>
      <p class="plan-price">{{ tier.price }}</p>
      <li class="plan-action">
        <a class="btn btn-primary" (click)="onEdit(tier)">Edit</a>
        <a class="btn btn-success" (click)="this.clickSave()">SaveYes</a>
        <a class="btn btn-warning" >Get</a>
      </li>
    </ul>
 </div>
</div>

【讨论】:

  • 哇,我觉得自己非常愚蠢。非常感谢,这工作。不知道我可以使用 tier.rewards,以为它需要是 tierS.rewards,因为这是我在 component.ts 中定义它的方式非常感谢!
  • 所以基本上现在的层是指上面的层? puu.sh/wekZj/c85bc73f5a.png 只是问所以我理解未来
  • @junior_dn : 是的tier 指的是第一个*ngFor,不管你里面有多少个ngFor,因为*ngFor 创建block scope,就像var in javascript... 很高兴能提供帮助你:)
【解决方案2】:

试试这个

   <li *ngFor="let reward of tier.rewards">
        {{ reward }}
   </li>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-12
    • 2021-05-21
    • 2015-10-15
    • 1970-01-01
    • 2012-03-14
    • 2019-03-21
    • 2018-06-17
    相关资源
    最近更新 更多