2017-08-06 59 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