2017-08-06 3 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によって呼び出されている私のユーザーサービスです。私がいる

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

あなたがboolean型プロパティの方法としてcurrentUserIsAdminを呼び出しているです。あなたの代わりにisCurrentUserAdmin

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

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

ああ男、新人エラーになるべき実際のメソッドを呼び出したいです。鋭い目に感謝します。私はゴムを抱かせるべきだった。 – Dave

+0

@Dave haha​​、いつも私に起こる – LLai