2016-07-11 8 views
0
import { ViewContainerRef, ComponentFactoryResolver, Directive, ResolvedReflectiveProvider} from '@angular/core'; 
import { Router, RouterOutlet, ActivatedRoute, RouterOutletMap } from '@angular/router'; 

@Directive({ 
    selector: 'router-outlet' 
}) 
export class ApplicationRouter extends RouterOutlet { 
    publicRoutes: Array; 
    private parentRouter: Router; 
    private router: Router; 

    constructor(parentOutletMap: RouterOutletMap, location:ViewContainerRef, componentFactoryResolver: ComponentFactoryResolver, name: string) { 
     super(parentOutletMap, location, componentFactoryResolver, name); 
     this.router = _parentRouter; 
    } 

    activate(activatedRoute: ActivatedRoute, providers: ResolvedReflectiveProvider[], outletMap: RouterOutletMap) { 
     debugger; 
     // return super.activate(instruction); 
    } 

} 

でrouterOutletを拡張するにはどうすればよい私は私がインスタンス化されるスーパークラスの型を知らない、 目的は、ルータレベルへの許可を移動することです。私は、角2 RC4

+0

これについてのドキュメントはありますか? – Nicu

答えて

1

特定の理由でRouterOutletを拡張したいのですか、ルートに認証レイヤーを追加するだけですか?後者の場合、authクラスを "extends RouterOutlet"から "CanActivateを実装する"に変更してください。

「AuthenticationGuard」実装例:

import { CanActivate } from '@angular/router'; 

@Injectable() 
export class AuthGuard implements CanActivate { 
    constructor(private authService: AuthService, private router: Router) {} 

    canActivate() { 
    if (this.authService.isLoggedIn) { return true; } 
    this.router.navigate(['/login']); 
    return false; 
    } 
} 

そして、あなたのルート上(複数可)ファイルあなたがアクセス制御層をしたいルートに「CanActivate」プロパティを追加します。

//route file 
... 
{ 
    path: 'admin', 
    component: CrisisAdminComponent, 
    canActivate: [AuthGuard] 
}, 
... 

シンプルです。

angular docs router guards session

1

から私はRC4に角度アップグレード後に同じ問題を抱えていました。アプリケーションコンポーネントの一つはRouterOutlet

を延長したRouterOutletあなたがCanActivateインターフェイスを実装することにより、ルータガードの使用を行う必要があり、あなたのクラスApplicationRouterの仕事をするために時間をかけて多くのことを変更しました。

私の回答hereを確認し、ルータガードの詳細についてはthisを参照してください。

こちらがお役に立てば幸いです。

関連する問題