2016-06-30 10 views
2

Ich benutze Angular 2 mit Router 3.0.0-aplha.8.NoProviderError mit CanActivate in Angular 2

Ich versuche mit der CanActivate-Funktion zu überprüfen, ob ein Benutzer authentifiziert ist. Ich habe einen AuthGuard, der CanActivate implementiert, für den Moment gebe ich nur wahr zurück.

route.ts

import { Injectable } from '@angular/core' 
import { provideRouter, RouterConfig, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router} from '@angular/router'; 

import { AuthGuard } from './auth-guard' 

import { SecurityComponent } from './security/security.component'; 
import { AdminDashboardComponent } from './admin/admin.dashboard.component'; 


export const mainRoutes: RouterConfig = [ 
{ path: '', component: SecurityComponent, }, 
{ path: 'admin', component: AdminDashboardComponent, terminal: true, canActivate: [AuthGuard] }] 

export const MAIN_ROUTER_PROVIDER = provideRouter(mainRoutes); 

Auth-guard.ts

import { Injectable } from '@angular/core'; 
import { 
    CanActivate, 
    Router, 
    ActivatedRouteSnapshot, 
    RouterStateSnapshot 
} from '@angular/router'; 

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

    canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot){ 
     return true; 
    } 
} 

Wenn ich versuche, "/ admin" (AdminDashboardComponent) zuzugreifen, erhalte ich diese Fehlermeldung:

enter image description here

Ich habe keine Ahnung was passiert. Jemand hat eine Idee?

Dank Iván

Antwort

5

Ich denke, wenn man MAIN_ROUTER_PROVIDER zu

export const MAIN_ROUTER_PROVIDER = [provideRouter(mainRoutes), AuthGuard]; 

es funktionieren sollte geändert werden.

+0

Thank you !! Ich war wirklich festgefahren. Was ist der Unterschied zwischen Ihrer Antwort und der Antwort von @ ed-morales? Können Sie mir sagen, was ist die beste Praxis? Danke nochmal! – IvanMoreno

+0

Er hat eine weitere Ebene der Abstraktion sonst ist es das gleiche. –

1

Sie müssen AuthGuard Bootstrap auch . Aktualisieren Sie Ihre Route Anbieter wie unten

export const MAIN_ROUTER_PROVIDER = [provideRouter(mainRoutes), AuthGuard]

und stellen Sie die Bootstrap-Funktion enthalten diese Liste bootstrap(appcomp,MAIN_ROUTER_PROVIDER)