我不明白为什么相同的代码无法在app.component中运行,这在auth.guard中完全有效。
我已经编写了一些代码来检查用户是否登录到服务器并在路由定义的auth.guard中使用了canActivate,如下所示
路由
{ path: 'dashboard', component: DashboardComponent , canActivate: [AuthGuard] }
AuthGuard
import { Injectable } from '@angular/core';
import { Router, CanActivate } from '@angular/router';
import { AuthService} from './services/auth.service';
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private authService:AuthService, private router:Router) { }
canActivate(next:ActivatedRouteSnapshot, state:RouterStateSnapshot) {
return this.authService.isAuth().map(e => {
if (e) {
return true;
}
}).catch(() => {
this.router.navigate(['/login']);
return Observable.of(false);
});
}
}
它工作正常,但在AppComponent中不起作用 的 AppComponent
import { Component } from '@angular/core';
import { OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { AuthService } from './services/auth.service';
@Component({
moduleId: module.id,
selector: 'my-app',
templateUrl: './views/app.component.html',
styleUrls: [ './styles/app.component.css' ]
})
export class AppComponent implements OnInit{
title = 'Jiffy';
status:boolean;
swap:boolean=true;
constructor(authService:AuthService, private router:Router){
return this.authService.isAuth().map(e => {
if (e) {
return true;
}
}).catch(() => {
this.router.navigate(['/login']);
return Observable.of(false);
});
}
}
我不明白为什么不在这里工作?
错误
错误:未捕获(在承诺中):TypeError:无法读取属性'isAuth' 未定义的TypeError:无法读取未定义的属性'isAuth' 新的AppComponent
AuthService
isAuth(){
return this.http.get("/account/check")
.map(function(res){
return status=res.json().status;
});
}
带Passport的Express服务器
router.get('/check', function(req, res,next) {
if (req.isAuthenticated()){
return res.send({"status":true});
}
return res.send({"status":false});
});
答案 0 :(得分:2)
如果您希望在组件内部使用public
,请在构造函数中添加private
或this
。
constructor(private authService:AuthService, private router:Router)
答案 1 :(得分:0)
错误是authService
未定义。您是否已将AuthService
声明为app.module中的提供者?