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的不必要调用,提高页面的运行效率。

相关内容

热门资讯

值得注意的是!约局吧透视辅助&... 值得注意的是!约局吧透视辅助"果然是有辅助脚本"(哔哩哔哩)暗藏猫腻,小编详细说明约局吧透视辅助破解...
最新消息!功夫川嘛辅助器是真的... 最新消息!功夫川嘛辅助器是真的假的"一直是真的有辅助脚本"(哔哩哔哩)1)功夫川嘛辅助器是真的假的辅...
有消息称!边锋辅助器"... 有消息称!边锋辅助器"原来确实有辅助技巧"(哔哩哔哩)1、起透看视 边锋辅助器辅助软件价格2、随意选...
黑科技辅助挂!广西友乐辅助ap... 黑科技辅助挂!广西友乐辅助app"本来真的有辅助插件"(哔哩哔哩)1、用户打开应用后不用登录就可以直...
现有说明如下!熊猫辅助技术导航... 现有说明如下!熊猫辅助技术导航"真是确实有辅助挂"(哔哩哔哩)在进入熊猫辅助技术导航软件靠谱后,参与...
值得注意的是!七千在线十三道辅... 值得注意的是!七千在线十三道辅助"都是存在有辅助工具"(哔哩哔哩)七千在线十三道辅助是不是有人用挂微...
据公告内容!决战卡五星辅助源码... 据公告内容!决战卡五星辅助源码"切实真的有辅助插件"(哔哩哔哩)1、决战卡五星辅助源码有没有辅助教程...
插件辅助挂!潮汕汇鱼虾蟹辅助&... 插件辅助挂!潮汕汇鱼虾蟹辅助"果然是有辅助器"(哔哩哔哩)1、全新机制【潮汕汇鱼虾蟹辅助ai辅助工具...
为了进一步!科乐游戏辅助脚本下... 为了进一步!科乐游戏辅助脚本下载"真是真的是有辅助软件"(哔哩哔哩)一、科乐游戏辅助脚本下载游戏安装...
截至发稿!天酷辅助巡查系统&q... 截至发稿!天酷辅助巡查系统"确实真的是有辅助脚本"(哔哩哔哩)1、天酷辅助巡查系统透视辅助软件激活码...