Angular4.x通過路由守衛(wèi)進行路由重定向?qū)崿F(xiàn)根據(jù)條件跳轉(zhuǎn)到相應的頁面(推薦)
需求:
最近在做一個網(wǎng)上商城的項目,技術(shù)用的是Angular4.x。有一個很常見的需求是:用戶在點擊“我的”按鈕時讀取cookie,如果有數(shù)據(jù),則跳轉(zhuǎn)到個人信息頁面,否則跳轉(zhuǎn)到注冊或登錄頁面
解決
在這里通過Angular的路由守衛(wèi)來實現(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;
}
}
}
//獲取當前路由配置信息
var path = route.routeConfig.path;
if (path == "login") {
if (!userModel.isLogin) {
//讀取cookie如果沒有用戶信息,則跳轉(zhuǎn)到當前登錄頁
return true;
} else {
//如果已經(jīng)登錄了則跳轉(zhuǎn)到個人信息頁面,下面語句是通過ts進行路由導航的
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通過路由守衛(wèi)進行路由重定向?qū)崿F(xiàn)根據(jù)條件跳轉(zhuǎn)到相應的頁面,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
angular6的table組件開發(fā)的實現(xiàn)示例
這篇文章主要介紹了angular6的table組件開發(fā)的實現(xiàn)示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12
Angular中實現(xiàn)樹形結(jié)構(gòu)視圖實例代碼
近兩年當中使用Angular開發(fā)過很多項目,其中也涉及到一些樹形結(jié)構(gòu)視圖的顯示,最近的在項目中封裝了大量的組件,一些組件也有樹形結(jié)構(gòu)的展示,所以寫出來總結(jié)一下。2017-05-05
Angularjs在初始化未完畢時出現(xiàn)閃爍問題的解決方法分析
這篇文章主要介紹了Angularjs在初始化未完畢時出現(xiàn)閃爍問題的解決方法,結(jié)合實例形式分析了3種常用的閃爍問題解決方法,需要的朋友可以參考下2016-08-08
ui-router中使用ocLazyLoad和resolve的具體方法
這篇文章主要介紹了ui-router中使用ocLazyLoad和resolve的具體方法,詳細的介紹了ocLazyLoad和resolve的具體用法,非常具有實用價值,需要的朋友可以參考下2017-10-10
angularjs實現(xiàn)搜索的關(guān)鍵字在正文中高亮出來
這篇文章主要介紹了angularjs實現(xiàn)搜索的關(guān)鍵字在正文中高亮出來,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06

