-<form (ngSubmit)="onSubmit()">
+<form [formGroup]="form" (ngSubmit)="onSubmit()">
<label>
Username:
- <input type="text" [(ngModel)]="username" name="username" required>
+ <input type="text" formControlName="username">
</label>
<br>
<label>
Password:
- <input type="password" [(ngModel)]="password" name="password" required>
+ <input type="password" formControlName="password">
</label>
<br>
- <button type="submit" [disabled]="isLoading">Login</button>
+ <button type="submit" [disabled]="isLoading || form.invalid">Login</button>
</form>
<div *ngIf="error">{{ error }}</div>
-<div *ngIf="token">Welcome, {{ username }}! Your token is {{ token }}</div>
+<div *ngIf="token">Welcome, {{ form.value.username }}! Your token is {{ token }}</div>
import { Component, inject } from '@angular/core';
-import { NgIf } from '@angular/common';
-import { FormsModule } from "@angular/forms";
+import { CommonModule } from '@angular/common';
+import { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from "@angular/forms";
import { Store } from '@ngrx/store';
import { login } from '../store/login.actions';
import { selectError, selectIsLoading, selectToken } from '../store/login.selectors';
@Component({
selector: 'app-login',
imports: [
- NgIf,
- FormsModule,
+ CommonModule,
+ ReactiveFormsModule
],
templateUrl: './login.component.html',
styleUrl: './login.component.less'
export class LoginComponent {
private store = inject(Store);
- username : string|null = null;
- password : string|null = null;
- token : string|null = null;
- error : string|null = null;
+ form: FormGroup;
+ error: string|null = null;
+ token: string|null = null;
isLoading : boolean = false;
+ constructor(private fb: FormBuilder) {
+ this.form = this.fb.group({
+ username: ['', Validators.required],
+ password: ['', Validators.required]
+ });
+ }
+
ngOnInit() {
this.store.select(selectToken).subscribe(token => (this.token = token));
this.store.select(selectError).subscribe(error => (this.error = error));
}
onSubmit() {
- this.store.dispatch(login({ username: this.username, password: this.password }));
+ this.store.dispatch(login({ username: this.form.value.username, password: this.form.value.password }));
}
}