Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Angular: using both *ngFor and *ngIf with reference to index value in child elements

I would like to render objects from array observable in some grid-car components. In addition, I want to limit the number of grid cards to a value based on variables in my component i.e. gridCols*maxRows using *ngIf condition checking.

I know that it is not possible to use both *ngFor and *ngIf simultaneously on the same element. So I need to use <template ngFor ...> to wrap my grid-card elements which will be conditionally rendered based on *ngFor. Given this, how I can reference index or content variables from *ngFor in *ngIf.

<template ngFor let-content [ngForOf]="contentObjectsObservable | async" let-i="index" [ngForTrackBy]="trackByFn">
    <grid-card *ngIf="i < gridCols*maxRows" [content]="content" [style.width.%]="gridCardWidth"></grid-card>
</template> 

UPDATE

I have tried something like this

 #i="index"

with such error message:

There is no directive with "exportAs" set to "index"

like image 772
Michał Ziobro Avatar asked Feb 04 '23 12:02

Michał Ziobro


1 Answers

You can reference the index from *ngFor by putting let i = index in the *ngFor statement! Example:

<div *ngFor="let item of items; let i = index">
    <div *ngIf="i < (gridCols * maxRows)" class="row">
    <grid-card [content]="content" [style.width.%]="gridCardWidth"></grid-card>
    </div>
</div>

Make sure that you have defined gridCols and maxRows as numbers in your component!

gridCols:number = <your number>;
maxRows:number = <your number>;

Hope this helps!

like image 112
ob1 Avatar answered May 16 '23 05:05

ob1