2016-11-01 14 views
0

私のアプリでは制限されたルートを追加したいと思います。彼らはここではドキュメントで説明されているように私はガードを書くが、私はtypescriptですなしでそれを達成しよう:https://angular.io/docs/ts/latest/guide/router.html#!#guardsAngular2 CanActivate undefined

私のガードは、次のようになりますが、それは@angular/router v3.1.1

で定義されていないので、私はCanActivateを使用することはできません
import { Router, CanActivate } from '@angular/router'; 
import { AuthService } from './app.auth.service'; 

console.log(CanActivate); // undefined 

export class AuthGuard extends CanActivate { 
    constructor(AuthService) { 
    super(); 
    this._authService = AuthService; 
    } 

    canActivate() { 
     return this.checkIfLoggedIn(); 
    } 

    _checkIfLoggedIn() { 
     const user = this._authService.getUser(); 

     return user; 
    } 

    static get parameters() { 
    return [[AuthService]]; 
    } 
} 

すべてのアイデア?予想通り

EDIT

このアプローチは、私のバックトラックに助けてくれてありがとう@PierreDuc、動作します。

import { Router } from '@angular/router'; 
import { AuthService } from './app.auth.service'; 

export class AuthGuard { 
    constructor(AuthService, Router) { 
    this._authService = AuthService; 
    this._router = Router; 
    } 

    canActivate() { 
    if (this._authService.isLoggedIn()) { 
     return true; 
    } 

    this._router.navigate(['/login']); 
    return false; 
    } 

    static get parameters() { 
    return [[AuthService], [Router]]; 
    } 
} 

答えて

1

これはinterfaceです。これは、タイプヒントとスタティック型の入力にのみ使用されますTypeScript。コンパイルされたJavaScriptに実際の出力はありません。そのため、論理的にはundefinedと評価されます。あなたのコードが動作していない可能性があります

理由は、あなたがcheckIfLoggedInを使用して_checkIfLoggedInで関数を定義するため(_が通話中で欠けている)です。

もう1つの理由は、getUserが非同期機能である可能性があります。その場合は、Observable<boolean>またはPromise<boolean>

+0

を返さなければなりません。ありがとうございます。インターフェイスはキーワードです。インターフェースはES6の一部ではありません。あなたは、es6とtypeScriptなしでguard/canActiveのコンセプトを使う方法を知っていますか? –

+0

@ d-bro82それを拡張する必要はありません。TypeScriptと同じように、ES6でも同様に動作します。 – PierreDuc

+0

これはとても役に立ちました。 –

関連する問題