2016-06-28 8 views
8

ich dieses json bezwecken:Angular2 ngFor - überspringen, wenn kein Wert

data = { 

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

Was wäre der empfohlene Weg sein, mit RC2, zu * ngFor und nur Artikel angezeigt werden, die eine Beschreibung?

Html Vorlage:

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

Können Sie ein * ngIf zur Vorlage hinzufügen? Etwas wie * ngIf = "item.description". –

+0

Danke Adrian. Ich möchte den li-Block überspringen oder als sekundäre Option zum Verbergen. –

+0

Sie können ein Filterrohr verwenden http://stackoverflow.com/questions/37827925/angular-2-filter-pipe/37828164#37828164 –

Antwort

10

ein *ngIf auf dem sich wiederholendes Element hinzufügen und überprüfen Sie mit einem falsy davon abhängig length Eigenschaft wie folgt:

<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> 

Sie können nicht auf den item Variable aus die *ngFor in der *ngIf auf dem gleichen Element, deshalb müssen Sie einen template Tag hinzufügen, die li einkapseln.


Arbeiten Plunker zum Beispiel Nutzung

+0

Funktioniert wie ein Charme. Vielen Dank! –

+0

Wie erhalte ich den Index des iterierten Elements, wenn ich diese Syntax verwende? Ursprünglich habe ich etwas wie folgt verwendet: '

  • ...
  • '. – kub1x

    +0

    Sollte mit 'let-i =" index "' arbeiten! – rinukkusu