Maison > interface Web > tutoriel CSS > Comment afficher un écran de chargement pendant la navigation d'itinéraire dans Angular 2 ?

Comment afficher un écran de chargement pendant la navigation d'itinéraire dans Angular 2 ?

Mary-Kate Olsen
Libérer: 2024-12-05 07:06:12
original
739 Les gens l'ont consulté

How to Show a Loading Screen During Route Navigation in Angular 2?

Afficher l'écran de chargement lors de la navigation entre les itinéraires dans Angular 2

Une exigence courante dans les applications angulaires est d'afficher un écran de chargement ou un indicateur lors de la navigation entre itinéraires. En exploitant les événements de navigation fournis par le routeur Angular, nous pouvons basculer la visibilité d'un écran de chargement en fonction de l'état de la navigation.

Utilisation de l'abonnement aux événements de navigation :

Dans l'AppComponent racine, abonnez-vous aux événements du routeur. Lorsqu'un événement NavigationStart se produit, affichez l'écran de chargement. Lorsqu'un événement NavigationEnd est émis, masquez l'écran de chargement. De plus, gérez les événements NavigationCancel et NavigationError pour garantir que l'écran de chargement est masqué en cas d'échec des transitions d'itinéraire.

import { Router, Event, NavigationStart, NavigationEnd, NavigationCancel, NavigationError } from '@angular/router';

@Component({ /* ... */ })
export class AppComponent {

    loading = true;

    constructor(private router: Router) {
        this.router.events.subscribe((event: Event) => {
            this.navigationInterceptor(event);
        });
    }

    navigationInterceptor(event: Event): void {
        if (event instanceof NavigationStart) {
            this.loading = true;
        }
        else if (event instanceof NavigationEnd) {
            this.loading = false;
        }
    }

}
Copier après la connexion

Dans le modèle du composant racine, affichez l'écran de chargement à l'aide de la directive *ngIf.

<div *ngIf="loading" class="loading-overlay">
    <!-- Add your loading indicator here -->
</div>
Copier après la connexion

Optimisation des performances :

Pour de meilleures performances, Angular Les fonctionnalités de NgZone et de Renderer peuvent être exploitées à la place de la directive *ngIf. Cela évite le mécanisme de détection des changements d'Angular lors de la mise à jour de la visibilité du spinner.

@ViewChild('spinnerElement') spinnerElement: ElementRef;

constructor(private router: Router,
            private ngZone: NgZone,
            private renderer: Renderer) {
    router.events.subscribe(this._navigationInterceptor);
}

private _navigationInterceptor(event: Event): void {
    if (event instanceof NavigationStart) {
        this.ngZone.runOutsideAngular(() => {
            this.renderer.setElementStyle(this.spinnerElement.nativeElement, 'opacity', '1');
        });
    }
    else if (event instanceof NavigationEnd) {
        this._hideSpinner();
    }
}

private _hideSpinner(): void {
    this.ngZone.runOutsideAngular(() => {
        this.renderer.setElementStyle(this.spinnerElement.nativeElement, 'opacity', '0');
    });
}
Copier après la connexion

Dans le modèle du composant racine, supprimez la directive *ngIf et référencez directement l'élément spinner.

<div #spinnerElement>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal