Angular的CanActivate守卫如何等待API响应而不需要每次都调用API?
创始人
2024-10-24 02:00:32
0

可以使用RxJS中的operator,比如switchMap()来实现等待API响应并且避免重复调用API的问题。具体实现方式可以参考下面的代码示例:

import { Injectable } from '@angular/core';
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';
import { Observable } from 'rxjs/Observable';
import { AuthService } from './auth.service';
import { switchMap } from 'rxjs/operators';

@Injectable()
export class AuthGuard implements CanActivate {

  constructor(private auth: AuthService, private router: Router) { }

  canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable | Promise | boolean {
    return this.auth.getUser().pipe(
      switchMap(user => {
        if (user) {
          return Observable.of(true);
        } else {
          this.router.navigate(['/login']);
          return Observable.of(false);
        }
      })
    );
  }
}

在上面的代码中,AuthGuard是一个CanActivate的守卫,其实现了等待API响应并且避免重复调用API的问题。具体来说,在canActivate()方法中,我们使用了switchMap()运算符来等待getUser()方法返回的Observable对象,并根据用户是否存在来返回一个Observable对象。如果用户存在,则返回true;如果用户不存在,则导航至登录页面,并返回false。

这种使用RxJS的做法可以大大简化代码,并减少对API的不必要调用,提高页面的运行效率。

相关内容

热门资讯

如何分辨真伪!德扑数据分析软件... 如何分辨真伪!德扑数据分析软件,wepoke辅助有挂,扑克教程(一向是有挂)是一款可以让一直输的玩家...
透视软件!hhpoker透视脚... 透视软件!hhpoker透视脚本视频,边锋斗地主辅助微信,揭秘教程(有挂教程);人气非常高,ai更新...
必看攻略!wepoke透明挂辅... 一、wpk外挂简介了解软件请加微:136704302wpk外挂是一款在线扑克游戏平台,玩家可以在平台...
透视私人局!hhpoker免费... 1、透视私人局!hhpoker免费透视脚本,好友赣南插件,AI教程(有挂方法);详细教程。2、好友赣...
教程攻略!aa poker下载... 教程攻略!aa poker下载地址,微扑克系统发牌规律,第三方教程(一贯是真的有挂)微扑克系统发牌规...
透视模拟器!wepoker透视... 透视模拟器!wepoker透视,蘑菇云辅助使用视频,AI教程(有挂教程)是由北京得蘑菇云辅助使用视频...
关于!wepoke有吗,智星德... 自定义智星德州菠萝有挂吗系统规律,只需要输入自己想要的开挂功能,一键便可以生成出微扑克专用辅助器,不...
透视app!wpk透视脚本视频... 透视app!wpk透视脚本视频,掌中乐游戏中心破解版,第三方教程(有挂技巧)是一款可以让一直输的玩家...
我来教教你!wopoker分析... 我来教教你!wopoker分析器下载,德扑之星辅助器购买,系统教程(最初有挂)1、超多福利:超高返利...
透视安卓版!wepoker免费... 1、透视安卓版!wepoker免费永久脚本,广东雀神智能插件安装包,2025新版总结(有挂技巧)2、...