2016-07-03 17 views
0

私はCanActivate(Angular Documentation)を試してみました。セキュリティを必要とするすべてのルートに追加する必要があるため、ルートを作成する前にRouterOutletを拡張し、認証を確認する必要がありました。認証のために角2 RC 4のRouterOutletを拡張する方法

import {Directive, ViewContainerRef, ComponentFactoryResolver, ResolvedReflectiveProvider} from '@angular/core'; 
import {Router} from '@angular/router/src/router'; 
import {RouterOutletMap} from '@angular/router/src/router_outlet_map'; 
import {RouterOutlet} from '@angular/router/src/directives/router_outlet'; 
import {ActivatedRoute} from '@angular/router/src/router_state'; 

@Directive({ 
    selector: 'router-outlet' 
}) 

export class SecuredRouterOutlet extends RouterOutlet { 

    constructor(outletMap: RouterOutletMap, 
       location: ViewContainerRef, 
       componentFactoryResolver: ComponentFactoryResolver, 
       name: string) { 

     super(outletMap, location, componentFactoryResolver, name); 
    } 

    activate(activatedRoute: ActivatedRoute, providers: ResolvedReflectiveProvider[], outletMap: RouterOutletMap) { 
      /* TODO : Check for authentication */ 
      return super.activate(activatedRoute, providers, outletMap); 
    } 
} 

私は指定されたパラメータは、コールのターゲットのいずれかの署名と一致しないエラーが発生します。コンストラクタ内のsuper()メソッド用。 これはRouterOutletを拡張する適切な方法ですか?助けてください.. ありがとう

答えて

0

RC4では、RouterOutletを実装する代わりに、CanActivateクラスを実装することをお勧めします。

Angular 2のドキュメントのthis linkを参照してください。

ユーザーが許可されているかどうかのブール値を返してから、そのクラスへの参照をルートに入れます(新しいコンポーネントルーターを使用していると仮定します)。

関連する問題