(roztwór do kątowego 2, dla kątowego 4, stosowanie ng-IF/Else)
Zakładając, że linki są wyświetlane na stronie głównej app.component, wykonaj następujące czynności w app.component.ts. To skutecznie wyświetla link Wyloguj gdy użytkownik jest zalogowany, w przeciwnym wypadku wyświetla link login (spowodowane jest związany z obserwowanej zamiast pola statycznego)
public isUserLoggedIn: boolean = false;
ngOnInit(): void {
// Setup a subscription so our variable will know the latest status of login
this._authService.isLoggedIn().subscribe(status => this.isUserLoggedIn = status);
}
w HTML, użyj tego
<div>
<table *ngIf="isUserLoggedIn">
<tr>
<td>
<a href="#" (click)="logoutClicked($event)" id="logout"><span class="glyphicon glyphicon-log-out" aria-hidden="true"></span> Logout</a><br
/></td>
</tr>
</table>
<table *ngIf="! isUserLoggedIn">
<tr>
<td>
<a [routerLink]="['/login']" id="login"><span class="glyphicon glyphicon-log-in" aria-hidden="true"></span>Login</a><br
/></td>
</tr>
</table>
</div>
Zdarzenie logoutClicked wywoła metodę wylogowywania authService. Aby uniknąć dwukrotnego trafiania tą samą metodą, ngSwitch jest lepszym wyborem, ale jakoś nie jest w stanie sprawić, by działało, chociaż będzie wyglądać jak poniżej:
<div [ngSwitch]="IsUserLoggedIn()">
<a href="#" (click)="logoutClicked($event)" id="logout" *ngSwitchCase="true">
<span class="glyphicon glyphicon-log-out" aria-hidden="true"></span> Logout</a><br />
<a [routerLink]="['/login']" id="login" *ngSwitchCase="false">
<span class="glyphicon glyphicon-log-in" aria-hidden="true"></span>Login</a>
</div>
Dlaczego po prostu nie jest to p-tag lub coś innego, i umieścić zdarzenie click, które wywołuje metodę usługi? Jeśli chcesz, aby wyglądał jak link, zawsze możesz go stylizować;) – Alex
Metoda kliknięcia powoduje odświeżanie strony. Czy wiesz, jak jej unikać? – leo
Pokaż swój kod powiązany z tym i zobaczmy :) – Alex