angular2 HttpClient判断用户是否登录,来控制路由的跳转

创建一个login-guard.service.ts文件

import {Injectable} from '@angular/core';
import {ActivatedRouteSnapshot, NavigationEnd, Router, RouterStateSnapshot} from '@angular/router';
import {Observable} from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import {Store} from '@ngrx/store';
import * as fromReducer from '../ngrx/reducers';
import {GuardSuccess} from '../ngrx/actions/login-guard.action';

import {HttpClient} from '@angular/common/http';

interface LoginGuard {
  data: any;
  msg: string;
  status: boolean;
}


@Injectable()
export class LoginService {

  constructor(private router: Router, private store$: Store<fromReducer.State>, private http: HttpClient) {
  }

  canActivate(route: ActivatedRouteSnapshot,
              state: RouterStateSnapshot): boolean | Observable<boolean> | Promise<boolean> {

    return this.activate();
  }

  activate(): Observable<boolean> {
    const url = 'http://192.168.1.248:3307/judgeUser';
    return this.http.post(url, '').map((guard: LoginGuard) => {
      const guard$ = guard;
      console.log(guard$)
      if (!guard$.status) {
        this.router.navigate(['/']); // 没有用户登录的话就跳到登录页面
      }
      this.store$.dispatch(new GuardSuccess(guard$)); // 更改当前的用户信息
      return guard$.status;
    });
  }
}

使用方法:

const routes: Routes = [
  {
    path: '',
    component: ManageRouterComponent,
    children: [...ManageComponentsRoutes],
    canActivate: [LoginService]
  },
];



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值