我想根據角色限制路線。我想檢查導航路線是否有權訪問頁面或不在我的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. 如何獲得路徑軌道路線
- 6. 如何獲得當前的路線衛士
- 7. 我如何獲得當前路線的名稱?
- 8. 如何獲得執行當前線程的文件的當前路徑?
- 9. 路線獲取當前路線{佔位符}值symfony
- 10. 如何獲取當前路線或(即將到來的路線)數據?
- 11. Angular 2獲取當前路線
- 12. PHP Slim獲取當前路線組
- 13. Laravel 5.1 - 獲取當前路線
- 14. 獲取當前路徑/路徑傳遞_internal路線
- 15. Track Angular2當前路線
- 16. 當前路線模式
- 17. 力鐵路由器去當前路線
- 18. 如何獲取Symfony 2中的當前路線?
- 19. 如何在Ember的幫手中獲取當前的路線路徑?
- 20. 如何獲得角度2中的當前路線自定義數據?
- 21. 路線計算不顯示從當前位置的路線
- 22. 如何獲得線路例外
- 23. Symfony2:如何在javascript中獲取當前路線?
- 24. 如何在解析函數中獲取當前路線?
- 25. 如何在自定義路線中獲取當前用戶?
- 26. 如何在HtmlHelper中獲取當前路線?
- 27. 確定Aurelia中的當前路線
- 28. 流星Tracker.autorun獲得當前路由(無法讀取空的特性「路線」)
- 29. 如何在設計路線中獲得兩次路徑?
- 30. 我如何獲得我以前的路線?
謝謝,它的工作。 – Yashasvi
很高興幫助。乾杯。 –