Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

173
Vistas
Mat icon dynamically created based on state

in my app i display list of appeals, with their status (which is displayed using mat icon). Here is piece of my template

<div class="approve-detail" fxLayout="column" fxLayoutGap="10px">
      <p>Created: {{absDetail?.reqDate|date:'d. L. y HH:mm'}}</p>
      <ng-container *ngIf="absDetail?.defList">
        <mat-list >
          <mat-list-item class="def-item" *ngFor="let def of absDetail.defList">
            <mat-icon matListIcon *ngIf="def.idReject!=0" class="warn" matTooltip="Rejected">thumb_down</mat-icon >
            <mat-icon matListIcon *ngIf="def.idApprove!=0&&def.idReject==0" class="success" matTooltip="Approved">thumb_up</mat-icon>
            <mat-icon matListIcon *ngIf="def.idReject==0 && def.idApprove==0" matTooltip="Waiting">help</mat-icon>
            <p matLine>{{def.name}}</p>
          </mat-list-item>
        </mat-list>
        <mat-list *ngIf="abs | isDeleteAppealed:absDetail.defList">
          <mat-list-item class="def-item" *ngFor="let def of absDetail.defList">
            <mat-icon matListIcon *ngIf="def.idCancel<0" color="warn" matTooltip="Rejected">thumb_down</mat-icon >
            <mat-icon matListIcon *ngIf="def.idCancel>0" class="success" matTooltip="Approved">thumb_up</mat-icon>
            <mat-icon matListIcon *ngIf="def.idCancel==0" matTooltip="waiting">help</mat-icon>
            <p matLine>{{def.name}}</p>
          </mat-list-item>
        </mat-list>
      </ng-container>
    </div>

It works, but its kinda dirty with all that ng-ifs, is there any more elegant way to do this? I was thinking about pipe, but i need to generate three dynamic properties for each element: class, tooltip and proper icon name, so it doesnt seems like a better solution. Any ideas? What about some kind of directive?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

One option you could do is wrap them in a separate component. Use your let def as an @Input() parameter. When it gets set, you can automatically change the value of the class/tooltip/icon. Something like this:

abs-icon.component.ts

imports...

@Component({
    selector: 'abs-icon',
    templateUrl: './abs-icon.component.html',
    styleUrls: ['./abs-icon.component.css']
})
export class AbsIconComponent implements OnInit {
    
    public cls: string;
    public tooltip: string;
    public icont: string;

    private _abs: any;

    get abs(): any{
        return this._abs;
    }
    @Input() set abs(value: any) {
        this._abs = value;

        if (_abs.idReject != 0) {
            cls = "warn";
            tooltip = "Rejected";
            icont = "thumb_down"
        }
        else if (.......do the rest){
            /* some code */
        }
    }

    constructor() { }

    ngOnInit(): void { }
}

abs-icon.component.html

<mat-icon matListIcon 
    class="{{cls}}" 
    [matTooltip]="tooltip">

{{icon}}

</mat-icon >

using it:

<abs-icon [abs]="def"> </abs-icon>
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda