angular - 无法在 Angular 6 中实现 CanActivate 接口
问题描述
我尝试在 Angular 6 中实现 CanActivate 接口。下面是代码片段
import { AuthService } from './auth.service';
import { Injectable } from '@angular/core';
import { CanActivate, Router } from '@angular/router';
import { map } from 'rxjs/operators';
@Injectable({
providedIn: 'root'
})
export class AuthGuardService implements CanActivate{
constructor(private authService : AuthService, private router : Router) { }
canActivate(){
this.authService.user$.pipe( map( user => {
if(user) return true;
this.router.navigate(['/login']);
return false;
}));
}
}
当我这样做时,它会在编译时异常之后抛出我
“AuthGuardService”类型中的属性“canActivate”不能分配给基类型“CanActivate”中的相同属性。类型 '() => void' 不可分配给类型 '(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => boolean | 可观察 | 承诺'。类型 'void' 不能分配给类型 'boolean | 可观察 | 承诺'.ts(2416)
我理解上面的陈述,它需要返回以下类型之一'boolean | 可观察的布尔值 | 承诺布尔'
根据我的理解,上面的代码返回 Observable-boolean。我只是初学者,所以不知道什么时候出错了。
解决方案
更改 canActivate()
至
canActivate(路由:ActivatedRouteSnapshot,状态:RouterStateSnapshot)
推荐阅读
- node.js - 了解 Firebase 如何处理使用 JWT 登录
- c++ - 声明变量的分段错误 C++
- go - 不能在 syscall.SetsockoptInt 的参数中使用 int(fd)(int 类型的值)作为 syscall.Handle 值
- python - 如何在指定时间内在 django 中运行函数?
- openlayers - 在OL6中捕捉绘图的结尾
- mongodb - 如何在 Mongodb 2.6.6 版中进行搜索和替换?
- r - 如果页面上未标识,如何使用 Rvest 获取最后一页?
- javascript - 如何在switch语句中检查数字是否小于或等于
- c++ - CMake:编译生成可执行和可链接库
- blazor - 在 Blazor 中检测热重载的最佳方法是什么