Angular4.x通過(guò)路由守衛(wèi)進(jìn)行路由重定向?qū)崿F(xiàn)根據(jù)條件跳轉(zhuǎn)到相應(yīng)的頁(yè)面(推薦)
需求:
最近在做一個(gè)網(wǎng)上商城的項(xiàng)目,技術(shù)用的是Angular4.x。有一個(gè)很常見(jiàn)的需求是:用戶(hù)在點(diǎn)擊“我的”按鈕時(shí)讀取cookie,如果有數(shù)據(jù),則跳轉(zhuǎn)到個(gè)人信息頁(yè)面,否則跳轉(zhuǎn)到注冊(cè)或登錄頁(yè)面
解決
在這里通過(guò)Angular的路由守衛(wèi)來(lái)實(shí)現(xiàn)該功能。
1. 配置路由信息
const routes = [
{ path: 'home', component: HomeComponent },
{ path: 'product', component: ProductComponent },
{ path: 'register', component: RegisterComponent },
{ path: 'my', component: MyComponent },
{ path: 'login', component: LoginComponent, canActivate: [RouteguardService] },//canActivate就是路由守衛(wèi)
{ path: '', redirectTo: '/home', pathMatch: 'full' }
]
2. 路由守衛(wèi)條件(RouteguardService.ts)
import { Injectable, Inject } from "@angular/core";
import { DOCUMENT } from "@angular/common";
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router, NavigationStart } from "@angular/router";
import userModel from "./user.model";
@Injectable()
export class RouteguardService implements CanActivate {
constructor(private router: Router, @Inject(DOCUMENT) private document: any) {
}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
// this.setCookie("userId", "18734132326", 10);
//讀取cookie
var cookies = this.document.cookie.split(";");
var userInfo = { userId: "", pw: "" };
if (cookies.length > 0) {
for (var cookie of cookies) {
if (cookie.indexOf("userId=") > -1) {
userModel.accout = cookie.split("=")[0];
userModel.password = cookie.split("=")[1];
userModel.isLogin = false;
}
}
}
//獲取當(dāng)前路由配置信息
var path = route.routeConfig.path;
if (path == "login") {
if (!userModel.isLogin) {
//讀取cookie如果沒(méi)有用戶(hù)信息,則跳轉(zhuǎn)到當(dāng)前登錄頁(yè)
return true;
} else {
//如果已經(jīng)登錄了則跳轉(zhuǎn)到個(gè)人信息頁(yè)面,下面語(yǔ)句是通過(guò)ts進(jìn)行路由導(dǎo)航的
this.router.navigate(['product'])
}
}
}
setCookie(cname, cvalue, exdays) {
var d = new Date();
d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
var expires = "expires=" + d.toUTCString();
document.cookie = cname + "=" + cvalue + "; " + expires;
}
}
總結(jié)
以上所述是小編給大家介紹的Angular4.x通過(guò)路由守衛(wèi)進(jìn)行路由重定向?qū)崿F(xiàn)根據(jù)條件跳轉(zhuǎn)到相應(yīng)的頁(yè)面,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
angular6的table組件開(kāi)發(fā)的實(shí)現(xiàn)示例
這篇文章主要介紹了angular6的table組件開(kāi)發(fā)的實(shí)現(xiàn)示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
Angular中實(shí)現(xiàn)樹(shù)形結(jié)構(gòu)視圖實(shí)例代碼
近兩年當(dāng)中使用Angular開(kāi)發(fā)過(guò)很多項(xiàng)目,其中也涉及到一些樹(shù)形結(jié)構(gòu)視圖的顯示,最近的在項(xiàng)目中封裝了大量的組件,一些組件也有樹(shù)形結(jié)構(gòu)的展示,所以寫(xiě)出來(lái)總結(jié)一下。2017-05-05
Angularjs在初始化未完畢時(shí)出現(xiàn)閃爍問(wèn)題的解決方法分析
這篇文章主要介紹了Angularjs在初始化未完畢時(shí)出現(xiàn)閃爍問(wèn)題的解決方法,結(jié)合實(shí)例形式分析了3種常用的閃爍問(wèn)題解決方法,需要的朋友可以參考下2016-08-08
ui-router中使用ocLazyLoad和resolve的具體方法
這篇文章主要介紹了ui-router中使用ocLazyLoad和resolve的具體方法,詳細(xì)的介紹了ocLazyLoad和resolve的具體用法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-10-10
angularjs實(shí)現(xiàn)搜索的關(guān)鍵字在正文中高亮出來(lái)
這篇文章主要介紹了angularjs實(shí)現(xiàn)搜索的關(guān)鍵字在正文中高亮出來(lái),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06

