在路由器中使用订阅可以在 angular2/4 中激活失败
Using subscription in router can activate in angular2/4 fails
我试图保护我的路线,但收到
的错误
Type 'Subscription' is not assignable to type 'boolean
| Promise<boolean> | Observable<any>'
所以在路由守卫中有
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<any> | Promise<boolean> | boolean {
return this._authService.checkLoggedin().subscribe((res)=>{
if(!res){
console.log("res is not here..")
}
return res;
},(err)=>{
console.log("error is", err);
})
}
所以我有我的授权服务
checkLoggedin(): Observable<any> {
if (!this._accesstokenService.getToken('access_token')) {
return Observable.of(false); //just checks for localstorage
}
//if the access token exists validate it on the server
return this._http.post(this.authurl + 'auth/is-loggedin', 1)
.map((res) => {
return Observable.of(res);
});
}
我哪里错了。我仍然想继续使用来自 checkloggedin 方法的可观察值
您需要 return 在您的 canActivate
中观察而不是订阅
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<any> | Promise<boolean> | boolean {
return this._authService.checkLoggedin();
}
您的 return 签名规定如此,但如果我是您,我会将其设为 return 布尔值并保持简单。
我试图保护我的路线,但收到
的错误Type 'Subscription' is not assignable to type 'boolean
| Promise<boolean> | Observable<any>'
所以在路由守卫中有
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<any> | Promise<boolean> | boolean {
return this._authService.checkLoggedin().subscribe((res)=>{
if(!res){
console.log("res is not here..")
}
return res;
},(err)=>{
console.log("error is", err);
})
}
所以我有我的授权服务
checkLoggedin(): Observable<any> {
if (!this._accesstokenService.getToken('access_token')) {
return Observable.of(false); //just checks for localstorage
}
//if the access token exists validate it on the server
return this._http.post(this.authurl + 'auth/is-loggedin', 1)
.map((res) => {
return Observable.of(res);
});
}
我哪里错了。我仍然想继续使用来自 checkloggedin 方法的可观察值
您需要 return 在您的 canActivate
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<any> | Promise<boolean> | boolean {
return this._authService.checkLoggedin();
}
您的 return 签名规定如此,但如果我是您,我会将其设为 return 布尔值并保持简单。