*ngIf et * ngFor sur l'élément [duplicate]

cette question a déjà une réponse ici:

  • *ngIf et *ngFor sur le même élément à l'origine erreur 11 réponses

j'ai une situation où j'ai besoin d' *ngIf et *ngFor la directive sur le même élément. J'ai trouvé beaucoup de réponses sur le stackoverlow mais aucun pour ce type de situation.

j'ai une table dans laquelle je suis en boucle à travers le tableau des objets et écrire dynamiquement des cellules dans l'en-tête:

 <table border="1" width="100%">
        <thead>
            <tr>
                <td *ngFor="let item of headerItems" *ngIf="item.visible">{{ item?.name }}</td>
            </tr>
        </thead>
        <tbody>
            ...
        </tbody>
    </table>

je veux afficher/cacher si l'objet contient visible défini à true. Comment puis-je y parvenir?

24
demandé sur Igor Janković 2016-11-29 11:23:28

4 réponses

vous pouvez utiliser l'élément d'aide <ng-container> pour cela.

<ng-container *ngFor="let item of headerItems" >
 <td *ngIf="item.visible">{{ item?.name }}</td>
</ng-container>

il n'est pas ajouté au DOM.

66
répondu Günter Zöchbauer 2017-05-08 16:28:36

la réponse de Günter Zöchbauer est excellente. J'ai aussi trouvé la solution.

<td *ngFor="let item of headerItems" [hidden]="!item.visible">{{ item?.name }}</td>

mais celui-ci sera traité en html.

9
répondu Igor Janković 2016-11-29 08:32:53

vous pouvez également utiliser ngclass pour que

 .hidecell{
     display:none;
  }
<td *ngFor="let item of headerItems"  [ngClass]="{hidecell:item.isVisible}">
 {{ item?.name }}
</td>
2
répondu Sriram 2016-11-29 09:36:17

Vous pouvez utiliser modèle élément aussi:

<template ngFor let-item [ngForOf]="headerItems ">
   <td *ngIf="item.visible">{{ item?.name }}</td>
</template>

ça va marcher pour vous.

1
répondu Avnesh Shakya 2016-11-29 08:58:33