typescript - Angular 2+ - Efter lyckad inloggning, ändra min Login-komponent i rubriken till Användarkonto-komponent
Jag bygger en Angular2+-app. Började lära mig Angular för en vecka sedan.
Följande är strukturen -index.html - AppComponent(app-root) - Header Component(header) - Signup Component(signup)
SignupComponent är ett modal.
Efter en lyckad inloggning vill jag ersätta mitt registreringskonto med en användarkomponent (som ska vara en rullgardinsmeny med flera länkar - (Kontolänk, Logga ut-länk) ).
Lösningen som jag tänkte var att vid en lyckad inloggning borde jag sända händelsen till Header-komponenten från Signup-komponenten.
Vid mottagande av händelsen bör Header-komponenten byta till UserComponent och dölja Signup Component Div.
Användarkomponenten bör ha en autentiseringsvakt eftersom länkarna i rullgardinsmenyn bör skyddas.
Jag har några frågor
Hur ska jag routa från Signup Modal till index.html med nödvändiga ändringar? - Behöver jag uppdatera index.html där det kommer att ladda account-komponenten? Hur ska jag routa till index.html som ska ha den nya User-komponenten istället för signup-komponenten?
Är detta rätt tillvägagångssätt? Om inte, vad är det ideala sättet att göra detta i Angular 2+?
Svar #1
Jag skriver dessa tips för Angular 4.3. För det första vill jag föreslå att du inte lägger din HTML i index.html-filen, det är inte rätt metod. APP-komponenten är huvudkomponenten där du kan lägga all HTML. Nu, förutom headern (login/logout-länkar bör finnas här) och footer, ta bort annan HTML och använd router-outlet för att bygga en enkel-sida-applikation.
Jag antar att du redan har en inloggnings-/SignIn-komponent och en inloggnings-/SignIn-tjänst. Sätt först en variabel i inloggningstjänsten och markera den som falsk i konstruktören. Nu behöver du ändra värdet på denna variabel vid inloggnings- och utloggningsoperationer.
Efter det behöver man kalla login-tjänsten i app-komponenten och initiera den i konstruktorn.
Slutligen i appkomponentens HTML, där du har login/logout-länkar, använd ngIf för att visa/dölja dessa länkar med login service-variabeln.
Min kod ser ungefär ut som nedan.
Inloggningstjänst
export class LoginService{
isloggedin : boolean;
constructor(private _http: Http){
this.isloggedin = false;
}
Appkomponent HTML
<li *ngIf="!loginService.isloggedin"> <a routerLink="login">Login</a> </li>
<li *ngIf="!loginService.isloggedin"> <a routerLink="register">Register</a> </li>
<li *ngIf="loginService.isloggedin"> <a routerLink="logout">Logout</a> </li>
App-komponent
import { LoginService } from './login.service';
export class AppComponent {
constructor(private loginService: LoginService){
}
Efter utloggning rensar jag helt enkelt localstorage och sätter isloggedin till false;
Svar #2
Ta en titt på Angular-rutter: https://angular.io/docs/ts/latest/tutorial/toh-pt5.html
Och ngIF-direktivet: https://angular.io/docs/ts/latest/guide/structural-directives.html#!#ngIf
Du kan skapa ett Booleskt värde som ansvarar för att hålla information om vad som ska visas, t.ex. isClientLogged=true/false. Använd sedan ett ngIf-uttryck för att visa vad du vill. Om du vill omdirigera en del av din sida till en annan, använd Angular-rutter.
