2016-08-20 5 views
2

Ich bin nicht dabei, die geschützte Komponente HeaderComponent auf die LoginComponent Komponente umgeleitet werden, wenn der Wert falsch ist die Funktion canActivate.Angular 2 RC5 - Umleiten der Route mit Observable

Die HeaderComponent Komponente und ihre Kinder geschützt sind, den Zugriff nur die URL http://localhost:3000/#/header/index der Bildschirm leer geht, und ich wollte es http://localhost:3000/#/auth gerichtet werden, dass der Login-Bildschirm ist

Wer weiß, wie mir zu helfen?

auth.guard.ts

import {Injectable} from '@angular/core'; 
import {CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router} from '@angular/router'; 
import {Observable, BehaviorSubject} from 'rxjs/Rx'; 
import 'rxjs/operator/take'; 
import {LoginService} from './login/login.service'; 

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

    canActivate(
     route: ActivatedRouteSnapshot, 
     state: RouterStateSnapshot): Observable<boolean> | boolean { 
     this.loginService.logado() 
      .subscribe(
       data => { 
        return data //true 
       }, 
       error => { 
        this.loginService.redirectUrl = state.url; 
        this.router.navigate(['/auth']); 
        return error //false 
       } 
     ) 
     return this.loginService.logado().take(1); 
    } 
} 

routes.component.ts

import {Routes, RouterModule} from '@angular/router'; 
import {LoginComponent} from './login/login.component'; 
import {HeaderComponent} from './header/header.component'; 
import {AuthGuard} from './auth.guard'; 
import {UserComponent} from './user/user.component'; 
import {IndexComponent} from './index/index.component'; 
import {UserPasswordComponent} from './user/user.password.component'; 

export const appRoutes: Routes = [ 
    {path: 'auth', component: LoginComponent}, 
    {path: 'user', component: UserPasswordComponent}, 
    {path: 'header', component: HeaderComponent, canActivate: [AuthGuard], 
     children: [ 
      {path: 'index', component: IndexComponent}, 
      {path: 'user', component: UserComponent} 
     ] 
    }, 
    {path: '', redirectTo: 'auth', pathMatch: 'full'}, 
]; 

export const routing = RouterModule.forRoot(appRoutes); 

Antwort

1

Es funktioniert nach der Reparatur auth.guard.ts Datei als Referenz Angular2 - Extending router and Observable

auth.guard.ts

import {Injectable} from '@angular/core'; 
import {CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router} from '@angular/router'; 
import {Observable} from 'rxjs/Rx'; 
import {LoginService} from './login/login.service'; 

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

    canActivate(
     route: ActivatedRouteSnapshot, 
     state: RouterStateSnapshot): Observable<boolean> | boolean { 
     return this.loginService.logado() 
      .map(
       data => { 
        if (data == false) { 
         this.router.navigate(['/auth']); 
         return data; 
        }; 

        if (data == true) { 
         return data; 
        } 
       }, 
       error => { 
        this.router.navigate(['/auth']); 
        return error 
       } 
      ) 
     } 
}