Heim >Web-Frontend >CSS-Tutorial >Wie zeige ich einen Ladebildschirm während der Routennavigation in Angular 2 an?

Wie zeige ich einen Ladebildschirm während der Routennavigation in Angular 2 an?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-05 07:06:12725Durchsuche

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

Ladebildschirm beim Navigieren zwischen Routen in Angular 2 anzeigen

Eine häufige Anforderung in Angular-Anwendungen ist die Anzeige eines Ladebildschirms oder einer Ladeanzeige beim Navigieren zwischen Routen. Durch die Nutzung der vom Angular-Router bereitgestellten Navigationsereignisse können wir die Sichtbarkeit eines Ladebildschirms entsprechend dem Navigationsstatus umschalten.

Verwenden eines Abonnements für Navigationsereignisse:

In Abonnieren Sie als Root-AppComponent die Ereignisse des Routers. Wenn ein NavigationStart-Ereignis auftritt, wird der Ladebildschirm angezeigt. Wenn ein NavigationEnd-Ereignis ausgegeben wird, blenden Sie den Ladebildschirm aus. Behandeln Sie außerdem die Ereignisse NavigationCancel und NavigationError, um sicherzustellen, dass der Ladebildschirm bei fehlgeschlagenen Routenübergängen ausgeblendet wird.

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;
        }
    }

}

Zeigen Sie in der Vorlage der Stammkomponente den Ladebildschirm mit der *ngIf-Direktive an.

<div *ngIf="loading" class="loading-overlay">
    <!-- Add your loading indicator here -->
</div>

Leistungsoptimierung:

Für eine bessere Leistung sind Angulars NgZone und Renderer-Funktionen können anstelle der *ngIf-Direktive genutzt werden. Dadurch wird der Änderungserkennungsmechanismus von Angular beim Aktualisieren der Sichtbarkeit des Spinners umgangen.

@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');
    });
}

Entfernen Sie in der Vorlage der Stammkomponente die Direktive *ngIf und verweisen Sie direkt auf das Spinnerelement.

<div #spinnerElement>

Das obige ist der detaillierte Inhalt vonWie zeige ich einen Ladebildschirm während der Routennavigation in Angular 2 an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn