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
Freigeben: 2024-12-05 07:06:12
Original
723 Leute haben es durchsucht

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

}
Nach dem Login kopieren

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>
Nach dem Login kopieren

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');
    });
}
Nach dem Login kopieren

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

<div #spinnerElement>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage