2017-11-03 2 views
0

Ich möchte einen Spinner anzeigen, wenn die Navigation erfolgt. Wie kann ich Routerereignisse global hören, so dass ich Spinner auf NavigationStart anzeigen und es auf NavigationEnd ausblenden kann, wann immer Routing auftritt, wie wir mit HttpInterceptor für globale Abfangen von Anforderungen tun.Angular: So können Sie Router-Ereignisse global abhören

Bitte geben Sie mir einige Vorschläge. Diese

Antwort

2

ist das, was ich benutze:

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

@Component({ 
    selector: 'mh-root', 
    templateUrl: './app.component.html', 
    styleUrls: ['./app.component.css'] 
}) 
export class AppComponent { 
    loading: boolean = true; 

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

    checkRouterEvent(routerEvent: Event): void { 
     if (routerEvent instanceof NavigationStart) { 
      this.loading = true; 
     } 

     if (routerEvent instanceof NavigationEnd || 
      routerEvent instanceof NavigationCancel || 
      routerEvent instanceof NavigationError) { 
      this.loading = false; 
     } 
    } 
} 
+0

Persönlich würde ich diese Logik in einen Dienst bewegen, die eine beobachtbare aussetzt. –

+0

Es ist bereits als ein Dienst zur Verfügung gestellt, der bereits ein Observable aufdeckt. Ich wäre neugierig auf die Vorteile, die sich daraus ergeben, wenn man es in einen anderen Service einpackt? – DeborahK

Verwandte Themen