Angular 2条件ngFor

时间:2016-12-21 18:19:49

标签: angular angular-ng-if ngfor

我正在尝试清理我的模板代码。我有以下内容:

<ul>
  <li *ngIf="condition" *ngFor="let a of array1">
    <p>{{a.firstname}}</p>
    <p>{{a.lastname}}</p>
  </li>
  <li *ngIf="!condition" *ngFor="let b of array2">
    <p>{{b.firstname}}</p>
    <p>{{b.lastname}}</p>
  </li>
</ul>

有没有办法有条件地选择array1array2来迭代使用*ngIf或其他东西,以便我不必重复这么多模板代码?这只是一个例子;我的实际<li>包含更多内容,所以我真的不想重复自己。谢谢!

5 个答案:

答案 0 :(得分:29)

  <li *ngFor="let a of (condition ? array1 : array2)">
    <p>{{a.firstname}}</p>
    <p>{{a.lastname}}</p>
  </li>

答案 1 :(得分:0)

在ngFor循环外使用[ngIf]的模板标记。

<ul>
  <template [ngIf]="condition">
   <li *ngFor="let a of array1">
    <p>{{a.firstname}}</p>
    <p>{{a.lastname}}</p>
   </li>
  </template>
  <template [ngIf]="!condition">
   <li *ngFor="let b of array2">
    <p>{{b.firstname}}</p>
    <p>{{b.lastname}}</p>
   </li>
  </template>
</ul>

另请参阅此处的模板语法:https://angular.io/docs/ts/latest/guide/template-syntax.html#!#star-template

答案 2 :(得分:0)

您不能在同一元素中同时拥有*ngFor*ngIf。您可以使用<li>*ngFor内创建一个元素。像:

<li *ngIf="condition">
    <ul>
        <li *ngFor="let a of array1">

或使用*ngFor内的条件。像这样:

<li *ngFor="let a of (condition?array1:array2)">

或者您可以使用Peter Salomonsen指示的模板。

答案 3 :(得分:0)

您可以使用DOM无法识别的ng-container,因此仅用于条件。见下面的例子:

 <tr *ngFor="let company of companies">
        <ng-container *ngIf="company.tradingRegion == 1">
            <td>{{ company.name }}</td>
            <td>{{ company.mseCode }}</td>
         </ng-container>
  </tr>

上面的代码将:`

  

显示tradingRegion == 1

所有公司的列表

`

答案 4 :(得分:0)

我们可以根据条件使用bootstrap显示属性隐藏元素。

<li [ngClass]="{'d-none': condition}" *ngFor="let a of array1">
 <p>{{a.firstname}}</p>
 <p>{{a.lastname}}</p>
</li>