Ich habe eine AccessGuard-Klasse in meinem Projekt, die ihre Arbeit ist, um festzustellen, ob Benutzer auf die Route zugreifen kann oder nicht. Ich benutzte die router.url
, um die aktuelle Route zu erhalten, aber die URL gibt die Route vor der Navigation zur neuen Route zurück, wie ich in der Benutzerroute bin, und ich klicke auf die Kandidatenroute, so dass die URL Benutzer anstelle von Kandidaten zurückgibt, die ich validieren möchte Zugriff auf die Route dies ist meine Route-Datei:Angular 2 erhalten aktuelle Route in Wache
const routes:Routes = [
{
path:'',
component:PanelComponent,
canActivate:[AuthGuard,AccessGuard],
canActivateChild:[AuthGuard,AccessGuard],
children:[
{
path:'dashboard',
component:DashboardComponent
},
{
path:'users',
component:UsersComponent
},
{
path:'users/:id',
component:ShowUserComponent
},
{
path:'candidates',
component:CandidatesComponent
},
{
path:'permissions',
component:PermissionsComponent
},
{
path:'holidays',
component:HolidaysComponent
},
{
path:'candidate/:id',
component:CandidateComponent
},
{
path:'salary/create',
component:InsertSalaryComponent
},
{
path:'document/create',
component:InsertDocumentComponent
},
{
path:'leave/create',
component:InsertLeaveComponent
}
]
}
];
und das ist mein Zugang Wache:
permissions;
currentRoute;
constructor(private authService:AuthService,private router:Router){
this.permissions = this.authService.getPermissions();
}
canActivate(){
return this.checkHavePermission();
}
canActivateChild(){
console.log(this.router.url);
return this.checkHavePermission();
}
private checkHavePermission(){
switch (this.router.url) {
case "/panel/users":
return this.getPermission('user.view');
case '/panel/dashboard':
return true;
case '/panel/candidates':
return this.getPermission('candidate.view');
default:
return true;
}
}
getPermission(perm){
for(var i=0;i<this.permissions.length;i++){
if(this.permissions[i].name == perm){
return true;
}
}
return false;
}
ich Frage nur habe ich die ActivatedRouteSnapshot von Parametern entfernt und die state.url hat ein Array zurückgegeben, aber wenn ActivatedRouteSnapshot in Argumenten ist, übergibt es die tatsächliche URL warum? –
Sie sollten ActivatedRouteSnapshot nicht aus Parametern entfernen, auch wenn Sie nur den RouterStateSnapshot-Parameter verwenden möchten. Die Parameter sind durch Position definiert. Der erste Parameter ist immer ActivatedRouteSnapshot und sein URL-Feld ist ein Array. Der zweite Parameter ist immer der RouterStateSnapshot-Parameter und sein URL-Feld ist eine Zeichenfolge. Ich hoffe es hilft. –
Vorsicht: Wenn Ihre URL queryparams hat, müssen Sie dies möglicherweise tun: 'console.log (state.urlsubstring (0, state.url.indexOf ("? ")));' –