Angular 9/8 ngFor Directive: Render Arrays with ngFor by Example
In this quick how-to tutorial we'll be learning about the ngFor
directive in Angular and how to use it to display arrays of data in your Angular templates.
We'll be using Angular 9 for the example.
We'll learn about these things:
- What
ngFor
does in Angular and how it's used? - What is the variable visibility/scope inside an
ngFor
loop? - How to find the index position of an element inside an ngFor loop?
- Getting the
first
and thelast
element inside an ngFor loop
Let's get started with our tutorial to master ngFor
in Angular!
Check out How to repeat an HTML element or component multiple times in Angular 9/8?
What ngFor
does in Angular and how it's used?
ngFor is a core Angular directive that can be used as a part if Angular template syntax to entend HTML with an easy way to itertave over lists of data right inside the component's template.
You can use `ngFor lists and tables in HTML templates. For example, let's consider the following array of objects representing a set of products in a component:
const PRODUCTS = [
{"id":1,"name":"Licensed Frozen Hat","description":"Incidunt et magni","price":"170.00","quantity":56840},
{"id":2,"name":"Rustic Concrete Chicken","description":"Sint libero mollitia","price":"302.00","quantity":9358},
{"id":3,"name":"Fantastic Metal Computer","description":"In consequuntur cupiditat","price":"279.00","quantity":90316},
{"id":4,"name":"Refined Concrete Chair","description":"Saepe nemo praesentium","price":"760.00","quantity":5899}
];
Using ngFor
, we can iterate over the PRODUCTS
array in the associated template and render/display data using an HTML list or table:
<ul>
<li *ngFor="let product of products">
<h2>{{product.name}} / ${{product.price}}</h2>
<p> {{product.description}} </p>
</li>
</ul>
Let's now understand more about ngFor
.
What is the syntax of ngFor
?
Let's see how ngFor
works by building a practical example. We'll only see how to create a component with an associated HTML template so you should already have an Angular development environment ready with Angular CLI v9 installed and a project generated. Both these two things can be done with the following two commands:
$ npm install @angular/cli
$ ng new angular-ngfor-example
Go ahead and navigate inside inside your project's folder and generate a component with the following commands:
$ cd ./angular-ngfor-example
$ ng generate component products
Open the src/app/products/products.component.ts
file and add the products
array as a member of ProductsComponent
as follows:
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-products',
templateUrl: './products.component.html',
styleUrls: ['./products.component.css']
})
export class ProductsComponent implements OnInit {
products = [
{"id":1,"name":"Licensed Frozen Hat","description":"Incidunt et magni","price":"170.00","quantity":56840},
{"id":2,"name":"Rustic Concrete Chicken","description":"Sint libero mollitia","price":"302.00","quantity":9358},
{"id":3,"name":"Fantastic Metal Computer","description":"In consequuntur cupiditat","price":"279.00","quantity":90316},
{"id":4,"name":"Refined Concrete Chair","description":"Saepe nemo praesentium","price":"760.00","quantity":5899}
];;
constructor() { }
ngOnInit() {
}
}
Next, open the src/app/products/products.component.html
file and update it as follows:
<ul>
<li *ngFor="let product of products">
<h2>{{product.name}} / ${{product.price}}</h2>
<p> {{product.description}} </p>
</li>
</ul>
When rendered, a <ul>
element will be created with an item for each product in the array. Let's understand the basic syntax if ngFor
:
-
ngFor
gets an expression comprised oflet
andof
keywords and variables; of
is followed by the array that we are iterating over. In our example, it'sproducts
which is defined in the associated component class;let
is used to define a variable that will contain the data for each iteration. In our example, we named itproduct
but you can name what's you think is convenient.
What's the Scope of the ngFor Loop Variable?
The variable used to represent the data availabe for each iteration inside an ngFor directive is only only visible inside the loop.
How to Get the Index of an Element Inside an ngFor Loop?
You can get the index of the current element in the ngFor
loop by using the index
variable:
<ul>
<li *ngFor="let product of products; let num = index">
<h2># {{num}} {{product.name}} / ${{product.price}}</h2>
<p> {{product.description}} </p>
</li>
</ul>
Conclusion
In this quick tutorial, we have learned about the ngFor
directive in Angular 9/8. Check out this tutorial for a complete Angular 8 example that demonstrates how we can use ngFor to display an array of fetched data in our HTML template.
-
Date: