angular7 - 未捕获( promise ): Error: Invalid CanActivate guard

标签 angular7

我是 angular 7 的新手,现在正在尝试实现 CanActive,但我收到错误:
enter image description here
谁能指导我克服这个问题。我的代码示例如下:

auth.guard.ts:

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

@Injectable({
  providedIn: 'root'
})
export class AuthGuard implements CanActivate {
  constructor(private auth: AuthService,
              private myRoute: Router){
  }

  canActivate(
    next: ActivatedRouteSnapshot,
    state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
    if (this.auth.isLoggednIn()){
      return true;
    } else {
      this.myRoute.navigate(["login"]);
      return false;
    }
  }
}

最佳答案

if 中使用 promise 条件总是一个坏主意,因为它没有得到解决。您可以使用 resolve 返回 promise 本身将结果 bool 值进一步向下传递:

canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Promise<boolean> | boolean {
   return new Promise(resolve =>
     this.auth.isLoggednIn()
       .then(status: boolean => {
         if(status === false) {
           this.myRoute.navigate(["login"]);
         }
         resolve(status);
       })
       .catch(() => {
         this.myRoute.navigate(["login"]);
         resolve(false);
         // ... or any other way you want to handle such error case
       })
  }
}

关于angular7 - 未捕获( promise ): Error: Invalid CanActivate guard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54995951/

相关文章:

typescript - 类 'NeedAuthGuard' 错误地实现了类 'CanActivate'。您的意思是扩展 'CanActivate' 并将其成员作为子类继承吗?

angular - 十进制管道,值不四舍五入

angular - Ngx-quill 工具栏自定义不起作用 - quill 无法导入模块

angular - 更改 Angular 7 中父组件中的变量

javascript - Ngx-mask 在生产中对输入字段强制验证

json - 如何在 Angular 7 的激活链接中获取 url 参数并从服务类调用 rest api

angular-cli - 浏览器加载 index.html 的缓存版本 - angular 7

javascript - 如何在 mat-radio 中为 mat-input 设置焦点

Angular 7 滚动事件不会触发

javascript - 将 JavaScript 结果(js 文件)返回到 Angular 7