Przede wszystkim bardzo polecam korzystanie ze zaktualizowanego routera Angular2. Najnowszy router zawiera obsługę guards
, które są dodawane do konfiguracji trasy, aby uniemożliwić dostęp do określonych tras.
Po upewnieniu się, że masz najnowszą routera, musisz zrobić kilka rzeczy:
1) Utwórz komponent najwyższego poziomu i nazywają to App
. Tutaj przejdzie Twoja <router-outlet>
.
2) Utwórz komponent Login
. Ten komponent powinien zawierać formularz logowania do aplikacji, wraz z logiką obsługi logowania. Utwórz trasę dla tego komponentu.
3) Utwórz komponent Home
(już to zrobiłeś).
4) Użyj guard
(nowa funkcjonalność w najnowszej routera), aby uniemożliwić użytkownikom dostęp do komponentu domu przed zalogowaniu
Twój kod będzie wyglądać mniej więcej tak (aby uzyskać więcej informacji, zobacz:. https://medium.com/@blacksonic86/upgrading-to-the-new-angular-2-router-255605d9da26#.n7n1lc5cl)
// auth-guard.ts
import { Injectable } from '@angular/core';
import {
CanActivate,
Router,
ActivatedRouteSnapshot,
RouterStateSnapshot
} from '@angular/router';
import { AuthService } from './services/auth/auth.service';
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private authService: AuthService, private router: Router) {}
canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
if (this.authService.isLoggedIn()) {
return true;
}
this.router.navigate(['login']);
return false;
}
}
Aby uzyskać więcej informacji na strażników:
Chciałbym również gorąco polecam czytania na najnowszej Kątowymi routera (docs zostały niedawno aktualizacja): https://angular.io/docs/ts/latest/guide/router.html
szczęście przy odpowiedzi poniżej? –
Wciąż brakuje mi jednej rzeczy, podstawowa strona aplikacji zawiera gniazdo routera z widocznym komponentem logowania, jeśli żaden użytkownik nie jest zalogowany lub komponent domowy, jeśli użytkownik się zalogował, wewnątrz komponentu domowego potrzebuję innego gniazda routera, które zmienia się po nawigacji użytkownika ? – galvan
Ah, widzę twoje pytanie. Powinieneś także mieć komponent najwyższego poziomu, nazwij to "App" - i tam powinien iść twój ''. Sprawdź ten artykuł: składniki najwyższego poziomu: https://scotch.io/tutorials/creating-your-first-angular-2-components –