2017-05-04 2 views
0

Zurück in angularjs (mit ui-Router). Sie können Ihren Routen Metadaten hinzufügen und diese in Routenänderungen verwenden.Angular Route Metadaten in Guards

Im Winkel gibt es Guards für diese, aber ich kann nicht herausfinden, wie die Metadaten aus der Route-Definition zu bekommen.

Um ein konkreteres Beispiel zu geben, möchte ich in der Lage sein, Metadaten zu einer Route hinzuzufügen, sagen wir die erforderlichen Rollen und/oder Berechtigungen und lassen eine Wache die Schwerarbeit übernehmen.

Routendefinitionen:

RouterModule.forChild([ 
    { 
     path: '', 
     component: MyComponent, 
     data: { 
      permissions: ["view"], 
      roles: ["admin", "user"] 
     } 
    }, 
    ... 
]); 

Und dann in meiner Wache:

constructor(private myService: MyService, private router: Router) {} 

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { 
    //How to get a hold of the data defined for the current route ? 
    console.log(route.data); //returns an empty object 
} 

Antwort

1

route.data[ 'permissions' ][ 0 ] die Zeichenfolge view im canActivate Methode der MyGuard sein sollte. MyGuard sollte CanActivate implementieren. Ihr Routing sollte wie folgt aussehen:

{ 
    path: '', 
    component: MyComponent, 
    data: { 
     permissions: ["view"], 
     roles: ["admin", "user"] 
    }, 
    canActivate: [ MyGuard ] 
} 

Und das Routing sollte funktionieren, wenn die Wurzel der Route erreichbar. A detailed explanation kann auf der offiziellen angularen Stelle gefunden werden.

+0

Ich erkannte später tatsächlich, dass meine Wache auf der falschen Routendefinition war. Danke trotzdem – RVandersteen