3

我是初学者,并且在我遵循这些教程时从教程中学习 Angular,当我CanAcivate按照他在教程中所做的那样实现接口时,它会显示错误

类“AuthGaurd”错误地实现了接口“CanActivate”。“AuthGaurd”类型中缺少属性“canActivate”,但在“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 中添加了以下内容,因为我在 StackOverflow 上观看了一个答案,但它对我也不起作用

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

3 回答 3

3

你的方法应该是canActivate()并且它应该返回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;
    });
    }
于 2019-02-27T07:32:47.417 回答
2

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

于 2019-02-27T07:30:50.610 回答
1

canActivate您应该从该方法返回一个布尔值。你的方法有拼写错误。它应该canActivate代替CanActivate. CanActivate是接口名称,其中 ascanActivate是方法名称

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;
    });


  }
}
于 2019-02-27T07:27:52.467 回答