我想根据角色限制路线。我想检查导航路线是否有权访问页面或不在我的canActivate方法。但是,this.router.url
这给了我以前的路线,而不是当前的导航路线。如何获得canActive路线中的当前路线?
2
A
回答
1
使用route: ActivatedRouteSnapshot
可以解决你的问题:
canActivate(route: ActivatedRouteSnapshot) {
console.log(route.url);
...
}
你可以在这里看到完整的规格为ActivatedRouteSnapshot对象:
https://angular.io/docs/ts/latest/api/router/index/ActivatedRouteSnapshot-interface.html
0
可以使用ActivatedRouteSnapshot
和RouterStateSnapshot
解决您的问题。
这里是我的Angular2应用程序的代码示例。
AUTH-guard.ts
import { CanActivate, Router, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { AuthCookie } from '../shared/services/auth-cookies-handler';
@Injectable()
export default class AuthGuard implements CanActivate {
constructor(private router: Router, private _authCookie: AuthCookie) { }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | boolean {
if (this._authCookie.getAuth()) {
//add your custom conditions for route nevigation
return true;
}
else {
this.router.navigate(['/login']);
return false;
}
}
}
app.routing.ts
import {ModuleWithProviders } from '@angular/core';
import {Routes, RouterModule } from '@angular/router';
import { HomeComponent } from '../home/home';
import {LoginComponent } from '../account/login';
import { RegisterComponent } from '../account/register';
import { JourneyComponent } from '../journey/journey.component';
import AuthGuard from './auth-guard';
const appRoutes: Routes = [
{
path: '',
redirectTo: 'home',
pathMatch: 'full'
}, {
path: 'journey',
component: JourneyComponent,
children: [
{ path: '', redirectTo: 'details', pathMatch: 'full' },
{ path: 'details', component: JourneyDetailsComponent, canActivate: [AuthGuard] },
{ path: 'documents', component: DocumentsComponent, canActivate: [AuthGuard] },
{ path: 'review', component: ReviewComponent, canActivate: [AuthGuard] },
{ path: 'payment', component: PaymentComponent, canActivate: [AuthGuard] }
]
, canActivate: [AuthGuard]
},
{
path: 'application',
component: ApplicationComponent,
canActivate: [AuthGuard]
},
{
path: 'login',
component: LoginComponent
},
{
path: 'activate-account/:uid',
component: AccountComponent
},
{
path: 'reset-password/:uid',
component: ResetPasswordComponent
},
{
path: 'home',
component: HomeComponent
},
{
path: 'register',
component: RegisterComponent
}
];
export const appRoutingProviders: any[] = [
];
export const routing: ModuleWithProviders = RouterModule.forRoot(appRoutes);
希望这将帮助你!
相关问题
- 1. 如何禁用后canActive路线成功
- 2. Angular 2获得当前防护路线
- 3. 如何获得Symfony 2中的当前路线?
- 4. 如何获得执行当前线程的文件的当前路径?
- 5. 路线获取当前路线{占位符}值symfony
- 6. Laravel 5.1 - 获取当前路线
- 7. Angular 2获取当前路线
- 8. 当前路线模式
- 9. 力铁路由器去当前路线
- 10. 如何获得角度2中的当前路线自定义数据?
- 11. 路线计算不显示从当前位置的路线
- 12. 如何获得线路例外
- 13. 如何在自定义路线中获取当前用户?
- 14. 如何在HtmlHelper中获取当前路线?
- 15. 我如何获得我以前的路线?
- 16. 在Backbone/Marionette中追加当前路线?
- 17. 如何获得路线路径的类型灰烬
- 18. 如何获得与特定路线字符串匹配的路线?
- 19. 如何获得附加到页面路线的尾部斜线?
- 20. linkTo/transitionTo:当目的地路线与当前路线相同时刷新路线/模型
- 21. 我如何获取路线?
- 22. ios - 如何获取特定路线的转由转弯路线?
- 23. 塔架 - 如何获取当前控制器和动作(当前路线)?
- 24. 如何获取路线“名称”当路由控制器
- 25. 角路由,当前路线按钮/从缺省路由
- 26. Laravel:我如何让路线路线返回带有斜线的路线?
- 27. 更短的路线路线
- 28. 如何获得线程组当前线程处于
- 29. 如何获取流明框架中的中间件当前路线?
- 30. 如何在Symfony中获取前一页的路线?
谢谢,它的工作。 – Yashasvi
很高兴帮助。干杯。 –