首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CanActivate问题TS2720

CanActivate问题TS2720
EN

Stack Overflow用户
提问于 2019-01-21 14:32:45
回答 3查看 2.6K关注 0票数 3

我在CanActivate上有个问题

代码语言:javascript
复制
import { AuthService } from './auth.service';

import { CanActivate } from '@angular/router/src/utils/preactivation';

import { ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';

import { Observable } from 'rxjs';

import { Injectable } from '@angular/core';

@Injectable()

export class AuthGuard implements CanActivate {

    constructor(private authService: AuthService,
                private router: Router)
    {

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

        if (this.authService.isAuth) {
            return true;
        }else{
            this.router.navigate(['/auth']);
        }
    }
}

它告诉我:

src/app/services/auth-guard.service.ts(10,14):ERROR TS2720中的错误:类'AuthGuard‘不正确地实现类'CanActivate’。您的意思是作为子类扩展‘能激活’并继承其成员吗? 类型“AuthGuard”缺少“CanActivate”类型中的下列属性:路径、路由

但我不明白为什么?

非常感谢大家!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-01-21 14:36:33

您从错误的位置导入了CanActivate接口。它应该是

import { CanActivate } from '@angular/router';

return false语句中使用else也是个好主意。

票数 8
EN

Stack Overflow用户

发布于 2019-01-21 14:46:09

可能已经启用了strict。您的函数指定了返回类型:Observable<boolean> | Promise<boolean> | boolean,但是您没有从return分支返回任何内容。也就是说,您的返回类型是true | undefinedboolean | undefined。你必须从其他分支退回一些东西:

代码语言:javascript
复制
import { Observable, EMPTY } from 'rxjs'
// and so on
    canActivate(route: ActivatedRouteSnapshot,state: RouterStateSnapshot )
    : Observable<boolean> | Promise<boolean> |boolean {

        if (this.authService.isAuth) {
            return true;
        }else{
            this.router.navigate(['/auth']);
            return EMPTY;
        }
    }
票数 1
EN

Stack Overflow用户

发布于 2019-10-12 10:54:40

在我的例子中,我提供的是一个粗心的错误。

代码语言:javascript
复制
        canActivate: AuthGuard,

而不是

代码语言:javascript
复制
        canActivate: [AuthGuard],

注意方括号

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54292142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档