Angular - 如何使canActivate等待Promise响应?
创始人
2024-10-14 21:00:58
0

在Angular中,可以使用rxjs中的from函数将Promise转换为Observable,然后使用switchMap操作符等待Promise响应。以下是一个示例:

  1. 创建一个AuthGuard守卫类,实现CanActivate接口:
import { Injectable } from '@angular/core';
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';
import { Observable, from } from 'rxjs';
import { switchMap } from 'rxjs/operators';

@Injectable()
export class AuthGuard implements CanActivate {

  constructor(private router: Router) {}

  canActivate(
    next: ActivatedRouteSnapshot,
    state: RouterStateSnapshot): Observable | Promise | boolean {

    // 模拟异步操作,返回一个Promise
    const promise = new Promise((resolve, reject) => {
      // 假设异步操作需要1秒钟
      setTimeout(() => {
        // 假设用户已登录
        const isAuthenticated = true;
        resolve(isAuthenticated);
      }, 1000);
    });

    // 将Promise转换为Observable,并等待其响应
    return from(promise).pipe(
      switchMap(isAuthenticated => {
        if (isAuthenticated) {
          return Observable.of(true);
        } else {
          // 跳转到登录页
          this.router.navigate(['/login']);
          return Observable.of(false);
        }
      })
    );
  }
}
  1. 在路由配置中使用AuthGuard守卫:
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { HomeComponent } from './home.component';
import { AuthGuard } from './auth.guard';

const routes: Routes = [
  {
    path: 'home',
    component: HomeComponent,
    canActivate: [AuthGuard] // 使用AuthGuard守卫
  }
];

@NgModule({
  imports: [RouterModule.forChild(routes)],
  exports: [RouterModule]
})
export class HomeRoutingModule { }

在上述示例中,AuthGuard守卫类使用from函数将Promise转换为Observable,并使用switchMap操作符等待Promise响应。根据Promise的响应结果,如果用户已登录,则返回Observable.of(true);如果用户未登录,则导航到登录页,并返回Observable.of(false)

相关内容

热门资讯

玩家必看秘籍!hhpoker免... 玩家必看秘籍!hhpoker免费透视脚本,wepoker辅助器软件下载,攻略方法(有挂软件)是一款可...
总算了解!wepoker透视是... 总算了解!wepoker透视是真的吗,wepoker免费透视脚本,安装教程(有挂透视);致您一封信;...
最新通报!aapoker ai... 最新通报!aapoker ai插件,wepoker怎么设置房间,解密教程(有挂技巧);玩家必备必赢加...
必备攻略!werplan透视挂... 必备攻略!werplan透视挂,werplan透视挂,攻略教程(有挂软件);致您一封信;亲爱werp...
玩家交流!约局吧能不能开挂,约... 玩家交流!约局吧能不能开挂,约局吧如何查看是否有挂,AA德州教程(有挂技巧)科技教程也叫必备教程,这...
总算清楚!wepoker透视版... 总算清楚!wepoker透视版下载,wepoker祈福有用吗,规律教程(有挂教程);建议优先通过we...
2分钟细说!红龙poker辅助... 2分钟细说!红龙poker辅助,hhpoker有没有外挂,黑科技教程(有挂辅助);最新版2024是一...
我来教大家!wepoker辅助... 我来教大家!wepoker辅助透视,wepoker免费脚本咨询,新版2025教程(有挂教程);支持2...
最新通报!hhpoker有透视... 此外,数据分析德州(hhpoker有透视功能吗)辅助神器app还具备辅助透视行为开挂功能,通过对客户...
透视教学!hhpoker视频巡... 透视教学!hhpoker视频巡查真的假的(透视)本来真的有挂(详细辅助新2025版);1、透视辅助简...