Angular4.x通过路由守卫进行路由重定向实现根据条件跳转到相应的页面(推荐)
需求:
最近在做一个网上商城的项目,技术用的是Angular4.x。有一个很常见的需求是:用户在点击“我的”按钮时读取cookie,如果有数据,则跳转到个人信息页面,否则跳转到注册或登录页面
解决
在这里通过Angular的路由守卫来实现该功能。
1.配置路由信息
constroutes=[ {path:'home',component:HomeComponent}, {path:'product',component:ProductComponent}, {path:'register',component:RegisterComponent}, {path:'my',component:MyComponent}, {path:'login',component:LoginComponent,canActivate:[RouteguardService]},//canActivate就是路由守卫 {path:'',redirectTo:'/home',pathMatch:'full'} ]
2.路由守卫条件(RouteguardService.ts)
import{Injectable,Inject}from"@angular/core"; import{DOCUMENT}from"@angular/common"; import{CanActivate,ActivatedRouteSnapshot,RouterStateSnapshot,Router,NavigationStart}from"@angular/router"; importuserModelfrom"./user.model"; @Injectable() exportclassRouteguardServiceimplementsCanActivate{ constructor(privaterouter:Router,@Inject(DOCUMENT)privatedocument:any){ } canActivate(route:ActivatedRouteSnapshot,state:RouterStateSnapshot):boolean{ //this.setCookie("userId","18734132326",10); //读取cookie varcookies=this.document.cookie.split(";"); varuserInfo={userId:"",pw:""}; if(cookies.length>0){ for(varcookieofcookies){ if(cookie.indexOf("userId=")>-1){ userModel.accout=cookie.split("=")[0]; userModel.password=cookie.split("=")[1]; userModel.isLogin=false; } } } //获取当前路由配置信息 varpath=route.routeConfig.path; if(path=="login"){ if(!userModel.isLogin){ //读取cookie如果没有用户信息,则跳转到当前登录页 returntrue; }else{ //如果已经登录了则跳转到个人信息页面,下面语句是通过ts进行路由导航的 this.router.navigate(['product']) } } } setCookie(cname,cvalue,exdays){ vard=newDate(); d.setTime(d.getTime()+(exdays*24*60*60*1000)); varexpires="expires="+d.toUTCString(); document.cookie=cname+"="+cvalue+";"+expires; } }
总结
以上所述是小编给大家介绍的Angular4.x通过路由守卫进行路由重定向实现根据条件跳转到相应的页面,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!