J'essaie d'implémenter une condition if else à l'intérieur d'une cellule mat d'un mat-table dans mon application angulaire. Mais j'obtiens une erreur de la console "ERROR Error: StaticInjectorError (AppModule) [NgIf -> TemplateRef]:"
mon code est
<ng-container matColumnDef="role"> <mat-header-cell *matHeaderCellDef>Role</mat-header-cell> <mat-cell *matCellDef="let user" ngIf="{{user.roles.length == 1}}"> Admin </mat-cell> </ng-container>
Toute aide est très appréciée .
3 Réponses :
vous avez ngIf
, mais il doit être précédé d'un astérisque: *ngIf
De plus, avec un attribut de directive lié comme * ngIf code> vous n'avez pas besoin d'utiliser les accolades à l'intérieur de cela. Faire simplement
* ngIf = "user.roles.length == 1"
devrait suffire.
Cependant, vous ne pouvez généralement pas avoir deux directives sur le même élément avec des astérisques, donc utiliser un autre
est probablement le moyen de résoudre ce problème:
<ng-container matColumnDef="role"> <mat-header-cell *matHeaderCellDef>Role</mat-header-cell> <ng-container *ngIf="user.roles.length == 1"> <mat-cell *matCellDef="let user" > Admin </mat-cell> </ng-container> </ng-container>
Merci mais cela ne fonctionnera pas car "user" y est indéfini dans ng-container
ah oui, peut-être simplement changer l'ordre de ces 2 éléments alors. Vous devrez utiliser 2 éléments quoi qu'il arrive puisque vous avez deux directives qui utilisent *
, et vous ne pouvez en avoir qu'un par élément.
Vous pouvez utiliser une classe pour définir l'affichage comme aucun et faire le tour
.hide { display: none; }
Et dans votre fichier de feuille de style
<ng-container matColumnDef="role"> <mat-header-cell *matHeaderCellDef>Role</mat-header-cell> <mat-cell *matCellDef="let user" [ngClass]="'hide':user.roles.length == 1"> Admin </mat-cell>
J'ai été confronté au même type de problème. Et j'ai trouvé les solutions suivantes.
[ngClass]
comme suit. <tr mat-footer-row [hidden]="dataSource.length==0" *matFooterRowDef="displayedColumns1"></tr>
[hidden]
. C'est comme la propriété CSS "display: none". <tr mat-footer-row [ngClass]="dataSource.length==0 ? 'hide' : ''" *matFooterRowDef="displayedColumns1"></tr>