2017-08-06 64 views
0

我想建立一个路由卫士班,只允许管理员用户访问特定页面。这里是我的admin.guard.ts角路由卫士 - 问题与呼叫签名

import { Injectable } from '@angular/core'; 
import { CanActivate, Router } from '@angular/router'; 
import { UserService } from '../services/user.service'; 

@Injectable() 
export class AdminGuard implements CanActivate{ 
    constructor(
     private router:Router, 
     private userService:UserService, 
    ){ 

    } 

    canActivate():boolean{ 
     return this.userService.currentUserIsAdmin(); 
    } 
} 

这里是被称为admin.guard.ts(IM只是硬编码真或假,在这个阶段,直到我得到的警卫工作),我的用户服务。我有

import { Injectable } from '@angular/core'; 
import { AngularFireDatabase, FirebaseListObservable, FirebaseObjectObservable } from 'angularfire2/database'; 
import { Observable } from 'rxjs'; 
import { MyAppUser } from '../models/MyAppUser'; 

@Injectable() 
export class UserService { 

    users:FirebaseListObservable<any[]>; 
    user:FirebaseObjectObservable<any>; 
    currentUserIsAdmin:boolean; 

    constructor(
    public af:AngularFireDatabase 
) { 
    this.users = this.af.list('/users') as FirebaseListObservable<MyAppUser[]>; 
    this.currentUserIsAdmin = true; 
    } 

    getUsers(){ 
    return this.users; 
    } 

    isCurrentUserAdmin():boolean{ 
    return this.currentUserIsAdmin; 
    } 
} 

问题是以下错误

ERROR in C:/projects/xyz/src/app/guards/admin.guard.ts (16,24): 
Cannot invoke an expression whose type lacks a call signature. 
Type 'Boolean' has no compatible call signatures. 

回答

0

你在呼唤你的布尔属性currentUserIsAdmin的方法。你要调用的实际方法,而不是isCurrentUserAdmin

canActivate():boolean{ 
    return this.userService.currentUserIsAdmin(); 
} 

应该成为

canActivate():boolean{ 
    return this.userService.isCurrentUserAdmin(); 
} 
+0

哦,新秀错误。感谢锐利的眼睛。我应该有橡皮鸭。 – Dave

+0

@Dave哈哈,一直都在我身上 – LLai