为什么不在app.component中工作但在auth.guard中工作?

时间:2017-03-01 17:47:41

标签: javascript angular routing

我不明白为什么相同的代码无法在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});
});

2 个答案:

答案 0 :(得分:2)

如果您希望在组件内部使用public,请在构造函数中添加privatethis

constructor(private authService:AuthService, private router:Router)

答案 1 :(得分:0)

错误是authService未定义。您是否已将AuthService声明为app.module中的提供者?