简体   繁体   English

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

[英]Class 'AuthGaurd' incorrectly implements interface CanActivate

I am beginner and learning Angular From tutorials as i follow those tutorials and when i implement interface CanAcivate as he did in tutorial its show error 我是初学者并且学习Angular From教程,因为我遵循这些教程,当我实现接口CanAcivate就像他在教程中所做的那样显示错误

Class 'AuthGaurd' incorrectly implements interface 'CanActivate'. 类'AuthGaurd'错误地实现了接口'CanActivate'。 Property 'canActivate' is missing in type 'AuthGaurd' but required in type 'CanActivate'.ts(2420) 'AuthGaurd'类型中缺少属性'canActivate',但在'CanActivate'.ts(2420)类型中需要

Here is implementation of Canactivate 这是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;
    });
  }
}`

And here is Imports 这是进口

 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';

I change Import from import { CanActivate } from '@angular/router/src/utils/preactivation'; import { CanActivate } from '@angular/router/src/utils/preactivation';更改导入import { CanActivate } from '@angular/router/src/utils/preactivation'; to import { CanActivate } from '@angular/router; But not work import { CanActivate } from '@angular/router; But not work import { CanActivate } from '@angular/router; But not work

Also I add following in canActivate as i watch one answer on StackOverflow but it also not work for me 另外我在canActivate中添加以下内容,因为我在StackOverflow上观看了一个答案,但它也不适用于我

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

注意canActivate函数的camel情况,并使用必要的参数来实现该函数。

your method should be canActivate() and it should return Observable<boolean> | boolean 你的方法应该是canActivate() ,它应该返回Observable<boolean> | boolean Observable<boolean> | boolean : 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;
    });
    }

You should return a boolean from the canActivate method. 您应该从canActivate方法返回一个布尔值。 There's a spelling mistake in your method. 您的方法中存在拼写错误。 it should be canActivate instead of CanActivate . 它应该是canActivate而不是CanActivate CanActivate is a interface name where as canActivate is the method name CanActivate是一个接口名称,其中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;
    });


  }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM