2017-05-02 3 views
0

ich folgende Routen Konfiguration in app.module.ts haben,Wie lautet die Standardmethode, die für alle Routen in angular2 app aufgerufen würde?

{ 
    path: 'login', 
    component: loginComponent, 
    canActivate: [loggerService] 
}, { 
    path: '', 
    component: AppComponent, 
    canActivate: [loggerService] 
}, { 
    path: '/home', 
    redirectTo: '' 
}, { 
    path: '/blog', 
    component: BlogComponent, 
    canActivate: [loggerService] 
} 

Wenn eine der Routen genannt wird, möchte ich eine Methode auszuführen. Um beispielsweise den Zugriff zu protokollieren oder einige Daten vorab anzufordern. Gibt es eine standardmäßige benutzerdefinierte oder integrierte Methode, mit der dies erreicht werden kann?

+0

Entschlossenheit Wächter: https://angular.io/docs /ts/latest/guide/router.html#!#resolve-guard – danimal

+0

Kannst du Code zeigen, wie es gemacht werden kann? – webblover

Antwort

1

Yes.There ist ein Weg, Auth Wache implementation.Below haben, ist das zum Beispiel:

import { Injectable } from '@angular/core'; 
    import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, CanActivateChild, Router } from '@angular/router';   

    @Injectable() 
    export class AuthGuard implements CanActivate, CanActivateChild { 

     constructor(private router: Router) { 
     } 

     canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { 
     if (condition)) { 
      return true; 
     } 
     this.router.navigate(['/unauthorized']); 
     return false; 
     } 

     canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { 
     return this.canActivate(route, state); 
     } 
    } 

In Sie Routen:

import { Routes, RouterModule } from '@angular/router'; 
import { AuthGuard } from 'Your Location/auth-guard.service'; 

const ROUTES: Routes = [ 
    { 
    path: '', 
    canActivateChild: [AuthGuard], 
    children: [ 
     {path: '', component: CardbrandComponent}  
     ] 

    } 
]; 
+0

Ich bin nicht überzeugt, ob es aus zwei Gründen der richtige Ansatz ist. 1, "CanActivate" -Komponente des Routers scheint mit nur zwei Benutzerzustände wie "autorisiert" oder "nicht autorisiert" in der Anwendung zu behandeln. Alle Beispiele der Klasse "AuthGuard" scheinen sich nur damit zu befassen. 2, Wenn die Anzahl der Module von 2 auf 50 oder mehr anwächst, wäre es mühsam, die "AuthGuard" -Abhängigkeit in allen Routenkonfigurationen in allen Modulen zu injizieren. Gibt es eine andere einfachere Lösung? – webblover

+0

Außerdem benötigt mein Anwendungsfall nicht die ** AuthGuard-Klasse **, da es nicht darauf ankommt, ob es eine autorisierte Benutzeranforderung ist oder nicht. – webblover

Verwandte Themen