Class 'AuthGaurd' 错误地实现了接口 CanActivate

Class 'AuthGaurd' incorrectly implements interface CanActivate

我是初学者,正在学习 Angular 从教程中学习,因为我遵循这些教程,当我实现界面时 CanAcivate 就像他在教程中所做的那样显示错误

Class 'AuthGaurd' 错误地实现了接口 'CanActivate'。 属性 'canActivate' 在类型 'AuthGaurd' 中缺失,但在类型 'CanActivate'.ts(2420)

中是必需的

这里是 Canactivate 的实现

export class AuthGaurd implements CanActivate
{
  constructor(private auth: AuthService, private router: Router) { }
  CanActivate(){
    return this.auth.user$.map(user => {
      if (user) return true;
      this.router.navigate(['/login']);
      return false;
    });
  }
}`

这里是进口

 import { Injectable } from '@angular/core';
    import { AuthService } from './auth.service';
    import { CanActivate } from '@angular/router/src/utils/preactivation';
    import { Router } from '@angular/router';
    import 'rxjs/add/operator/map';

我将导入从 import { CanActivate } from '@angular/router/src/utils/preactivation'; 更改为 import { CanActivate } from '@angular/router; But not work

我还在 canActivate 中添加了以下内容,因为我在 Whosebug 上看到了一个答案,但它对我也不起作用

 CanActivate(next: ActivatedRouteSnapshot,
 state: ActivatedRouteSnapshot): Observable<boolean>

您应该 return 来自 canActivate 方法的布尔值。您的方法中存在拼写错误。它应该是 canActivate 而不是 CanActivateCanActivate 是接口名称,其中 canActivate 是方法名称

import { Injectable } from '@angular/core';
import { CanActivate, ActivatedRouteSnapshot,
     RouterStateSnapshot, Router, CanActivateChild } from '@angular/router';

export class AuthGaurd implements CanActivate
{
  constructor(private auth: AuthService, private router: Router) { }
  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot){

    this.auth.user$.map(user => {
      if (user) return true ;
      this.router.navigate(['/login']);
      return false;
    });


  }
}

注意canActivate函数的驼峰式大小写,使用必要的参数实现函数。

你的方法应该是 canActivate() 并且它应该 return Observable<boolean> | boolean:

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

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | boolean {
      this.auth.user$.map(user => {
          if (user) return true;
      this.router.navigate(['/login']);
      return false;
    });
    }