To create a download progress bar with a percentage in Angular, you can use the HttpClient module to request a server and track the download's progress. Here is an example of how this can be done,
- First, install the
@angular/materialand@angular/cdkpackages in your Angular project:npm install @angular/material @angular/cdk - Import the
MatProgressBarModuleandMatProgressSpinnerModulemodules from the@angular/materialpackage in your Angular module:import { MatProgressBarModule, MatProgressSpinnerModule } from '@angular/material'; @NgModule({ imports: [ MatProgressBarModule, MatProgressSpinnerModule ], // ... }) export class AppModule { } - Now, import the HttpClient module and the HttpEventType enum from the
@angular/common/httppackage:import { HttpClient, HttpEventType } from '@angular/common/http'; - Inject the HttpClient service into your component or service using the constructor:
constructor(private http: HttpClient) {} - Create a function to make the download request and track the progress:
public percentDone: number = 0; public downloadFile() { this.http.get('https://example.com/file.zip', { responseType: 'blob' }) .subscribe(event => { if (event.type === HttpEventType.DownloadProgress) { // Update the progress bar with the download percentage const this.percentDone = Math.round(100 * event.loaded / event.total); console.log(`Downloaded ${this.percentDone}%`); } else if (event.type === HttpEventType.Response) { // Save the downloaded file const file = new Blob([event.body], { type: 'application/zip' }); const fileURL = URL.createObjectURL(file); window.open(fileURL); } }); } - In your component's template, use the
mat-progress-barandmat-progress-spinnercomponents to display the progress bar and percentage:<mat-progress-bar mode="determinate" [value]="percentDone"></mat-progress-bar> <mat-progress-spinner mode="determinate" [value]="percentDone"></mat-progress-spinner> <p>{{percentDone}}%</p> - You can use the
percentDoneproperty to bind to thevalueattribute of themat-progress-barandmat-progress-spinnercomponents, as well as to display the percentage as text.
This is an example of how you can create a material design download progress bar with a percentage in Angular. You can customize the appearance and behaviour of the progress bar and percentage by using the various options and styles available for the mat-progress-bar and mat-progress-spinner components.

Join the conversation! Your thoughts help the community grow.