[英]angular2 route guards validations
我正在使用angular创建一个新应用程序,我想在路线防护上设置一些验证。 例如我的网址是: localhost:4200/#/products
如果我想从菜单导航到我的应用程序localhost:4200/#/invoice
其他页面localhost:4200/#/invoice
我不希望导航只需手动修改网址和输入invoice
而不是products
但只在菜单点击。
所以这是我的警惕:
import { Injectable } from '@angular/core' ;
import { ActivatedRouteSnapshot, RouterStateSnapshot, CanActivate, Router } from '@angular/router';
@Injectable()
export class AlwaysAuthGuard implements CanActivate {
canActivate() {
console.log('AlwaysAuthGuard');
return true;
}
}
这是路由服务:
const appRoutes: Routes = [
{ path: '', redirectTo: 'login', pathMatch: 'full' },
{ path: 'login', component: AppLoginComponent, data: { title: 'Login' }},
{ path: 'invoice', component: InvoiceComponent, canActivate: [AlwaysAuthGuard], data: { title: 'Invoice' }},
{ path: 'products', component: ProductsComponent, data: { title: 'Products' }},
{ path: 'logout', component: LogoutComponent, data: { title: 'Logout' }},
{ path: '**', component: NotFoundComponent, data: { title: 'Page Not Found' }}
];
export const appRoutingProviders: any[] = [];
export const routing: ModuleWithProviders = RouterModule.forRoot(appRoutes, { useHash : true });
那么如何添加一些我限制网址修改的验证,并允许用户在按下点击时仅从导航菜单导航到其他页面。
您只需在菜单点击上存储一些标志即可。 例:
在菜单链接上收听点击事件,然后执行以下操作:
localstorage.setItem('menu-clicked', 'true');
然后在你的'AlwaysAuthGuard'检查是否在localstorage中提供'menu-clicked'。 例:
canActivate() {
// console.log('AlwaysAuthGuard');
if(localstorage.getItem('menu-clicked') == 'true'){
localstorage.removeItem('menu-clicked');
return true;
}
return false;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.