Ich arbeite an einer Angular 2+ App. Ich finde es sehr schwierig, etwas zu implementieren, das in AngularJS relativ einfach war.Wie zeigen Sie Elemente nur an, wenn der Benutzer in Angular 2+ eingeloggt oder abgemeldet ist?
würde ich meine Top-Navigation wie ein LOG IN-Taste, um anzuzeigen, wenn der Benutzer nicht angemeldet ist und ein AUSLOGGEN, als sie ist.
Ich habe alle möglichen Dinge versucht, aber ich kann es nicht richtig funktionieren. Ich will es konsequent über die gesamte App, arbeiten, und zwar unabhängig von Neuladen (es speichert isLoggedIn
zu localStorage
)
Meine aktuelle Implementierung ist nicht funktioniert, aber ich werde sie hier teilen, so dass Sie sagen können, ich, wenn ich wenigstens irgendwo auf der richtigen Spur bin.
top-navigation.component.html
<p class="nav-item my-2 my-lg-0" *ngIf="!isLoggedIn | async"><a class="nav-link" routerLink="/login" routerLinkActive="active">Login</a></p>
<p class="nav-item my-2 my-lg-0" *ngIf="isLoggedIn | async"><a class="nav-link" routerLink="//logout" routerLinkActive="active">Logout</a></p>
top-navigation.component.ts
export class TopNavigationComponent implements OnInit {
@ViewChild('topnav') topnav: ElementRef;
//isLoggedIn: boolean;
isLoggedIn: Observable<Boolean>;
constructor(private authService: AuthService, private logger: LoggerService) { }
ngOnInit() {
this.isLoggedIn = this.authService.getIsLoggedIn();
}
auth.service.ts
@Injectable()
export class AuthService {
loggedIn$: Subject<Boolean> = new Subject<Boolean>();
constructor(private logger: LoggerService) {
let isLoggedInLocalStore = (localStorage.getItem('isLoggedIn') === 'true');
if (!isLoggedInLocalStore) {
isLoggedInLocalStore = false;
localStorage.setItem('isLoggedIn', isLoggedInLocalStore.toString());
}
}
getIsLoggedIn(): Observable<Boolean> {
//return (localStorage.getItem('isLoggedIn') === 'true');
return this.loggedIn$.asObservable();
}
login(): void {
// TODO
this.logger.log("AuthService | Login clicked...");
localStorage.setItem('isLoggedIn', 'true');
this.loggedIn$.next(true);
}
logout() {
// TODO
localStorage.setItem('isLoggedIn', 'false');
this.loggedIn$.next(false);
}
}
Der Link "Arbeitsbeispiel" zeigt nichts – CodyBugstein
Ich habe Sie nicht auf diesem erhalten zeigt es ein Login mit Google. Und dann loggen Sie sich ein und dann wird es eine Abmeldeschaltfläche haben. –
Und ich denke, die Antwort ist oben, nutzen Sie Shared Services. Das war juat was ich für mein Projekt gemacht habe und habe es als Beispiel gezeigt. –