问题 Angular2 ngFor - 如果没有值则跳过


我有这个json对象:

data = {

  "name": "somename",
  "items": [
    {
      "title": "Item 1",
      "description": "Some description for item1"
    },
    {
      "title": "Item 2",
      ""
    },
    {
      "title": "Item 3",
      "description": "Some description for item3"
    }
  ]
}

使用rc2,* ngFor和仅显示具有描述的项目的推荐方法是什么?

Html模板:

<li *ngFor="let item of data.items" class="item">
        <div>{{item.title}}</div>
        <div>{{item.description}}</div>
</li>

4425
2018-06-28 14:41


起源

你可以在模板中添加* ngIf吗?像* ngIf =“item.description”之类的东西。 - Adrian Fâciu
谢谢阿德里安。我想跳过,或作为隐藏的第二选项,li块。 - Pat M
您可以使用过滤管道 stackoverflow.com/questions/37827925/angular-2-filter-pipe/... - Günter Zöchbauer


答案:


添加一个 *ngIf 在重复元素和检查与falsy条件 length 这样的财产:

<ul>
    <template ngFor let-item [ngForOf]="data.items">
        <li class="item" *ngIf="item?.description?.length">
            <div>{{item.title}}</div>
            <div>{{item.description}}</div>
        </li>
    </template>
</ul>

你无法访问 item 变量来自 *ngFor 在里面 *ngIf 在同一个元素上,这就是你需要添加一个 template 标记封装 li


加工 Plunker 例如用法


15
2018-06-28 14:46



奇迹般有效。谢谢! - Pat M
使用此语法时如何获取迭代项的索引?最初我使用过这样的东西: <li *ngFor="let step of steps; let i = index">...</li>。 - kub1x
应该合作 let-i="index"! - rinukkusu
如果我使用表并且在行上使用ngFor怎么办? - TeodorKolev
不推荐使用ng-template代替,工作正常。没有人应该定期* ngFor =“let ...”而是按照答案中的规定使用 - Theophilus Omoregbee