регистрация.html:
<form [formGroup] = "signupForm" (submit) = "onSubmit()" class = "form-detail" >
<h2>Registration Form</h2>
<div class = "form-row-total">
<div class = "form-row">
<input type = "text" name = "full-name" id = "full-name" class = "input-text" placeholder = "Your Name" required>
</div>
<div class = "row" >
<div *ngIf = "signupForm.controls.name.errors?.['required']" class = "alert alert-danger" role = "alert">
Enter a name
</div>
<div *ngIf = "signupForm.controls.name.errors?.['nom'] " class = "alert alert-danger" role = "alert">
Invalid name form
</div>
</div>
<div class = "form-row">
<input type = "text" name = "your-email" id = "your-email" class = "input-text" placeholder = "Your Email" required pattern = "[^@]+@[^@]+.[a-zA-Z]{2,6}">
</div>
<div class = "row" >
<div *ngIf = "signupForm.controls.email.errors?.['required'] " class = "alert alert-danger" role = "alert">
Enter an email
</div>
<div *ngIf = "signupForm.controls.email.errors?.['email'] " class = "alert alert-danger" role = "alert">
Invalid email form
</div>
<div *ngIf = "userexist" class = "alert alert-danger" role = "alert">
User already exists
</div>
</div>
</div>
<div class = "form-row-total">
<div class = "form-row">
<input type = "password" name = "password" id = "password" class = "input-text" placeholder = "Your Password" required>
</div>
<div class = "row" >
<div *ngIf = "signupForm.controls.password.errors?.['required'] " class = "alert alert-danger" role = "alert">
Enter a password
</div>
<div *ngIf = "signupForm.controls.password.errors?.['matchPassword'] " class = "alert alert-danger" role = "alert">
Passwords does not match
</div>
</div>
<div class = "form-row">
<input type = "password" name = "comfirm-password" id = "comfirm-password" class = "input-text" placeholder = "Confirm Password" required>
</div>
<div class = "row" >
<div *ngIf = "signupForm.controls.password.errors?.['matchPassword'] " class = "alert alert-danger" role = "alert">
Passwords does not match
</div>
</div>
</div>
<div class = "form-row-last">
<input type = "submit" name = "register" class = "register" value = "Sign Up">
</div>
</form>
регистрация.тс:
async onSubmit(): Promise<void> {
if (this.signupForm.valid) {
const name = this.signupForm.get('name')!.value;
const email = this.signupForm.get('email')!.value;
const password = this.signupForm.get('password')!.value;
const confirmpassword = this.signupForm.get('confirmpassword')!.value;
const userExists = await this.checkIfUserExists(email);
if (userExists) {
this.errorMessage = 'User already exists. Please use a different email.';
this.userexist=true;
} else {
this.errorMessage = null;
this.signupForm.reset();
await this.addNewUser(name, email, password);
await this.registeruser(name, email, password);
this.router.navigate(['/dashboard']);
}
} else {
console.info('Form is invalid');
}
}
поэтому после заполнения полей ввода сообщение «форма недействительна» всегда появляется в инструментах разработчика всякий раз, когда я нажимаю кнопку, даже если форматы верны. Пожалуйста, если вы можете улучшить мой HTML-код (я хочу, чтобы оповещения появлялись сразу после нажатия кнопки, а затем исчезали после повторного заполнения полей, или вы можете делать все, что хотите, если у вас есть идея получше)
В вашем файле Signup-Component.html правильно привяжите элементы управления name
, email
, password
, confirmPassword
к signupForm
. Кроме того, когда дело доходит до сообщений об ошибках, они отображаются только тогда, когда форма отправлена, а поля формы имеют недопустимое состояние. Обратитесь к следующему коду ниже и соответствующим образом реорганизуйте свой код.
знак-компонент.html:
<form [formGroup] = "signupForm" (ngSubmit) = "onSubmit()" class = "form-detail">
<h2>Registration Form</h2>
<div class = "form-row-total">
<div class = "form-row">
<input type = "text" formControlName = "name" class = "input-text" placeholder = "Your Name" required>
<div *ngIf = "signupForm.controls.name.touched && signupForm.controls.name.errors?.required" class = "alert alert-danger" role = "alert">
Enter a name
</div>
</div>
<div class = "form-row">
<input type = "text" formControlName = "email" class = "input-text" placeholder = "Your Email" required pattern = "[^@]+@[^@]+.[a-zA-Z]{2,6}">
<div *ngIf = "signupForm.controls.email.touched && signupForm.controls.email.errors?.required" class = "alert alert-danger" role = "alert">
Enter an email
</div>
<div *ngIf = "signupForm.controls.email.touched && signupForm.controls.email.errors?.pattern" class = "alert alert-danger" role = "alert">
Invalid email format
</div>
<div *ngIf = "userExists" class = "alert alert-danger" role = "alert">
User already exists
</div>
</div>
</div>
<div class = "form-row-total">
<div class = "form-row">
<input type = "password" formControlName = "password" class = "input-text" placeholder = "Your Password" required>
<div *ngIf = "signupForm.controls.password.touched && signupForm.controls.password.errors?.required" class = "alert alert-danger" role = "alert">
Enter a password
</div>
</div>
<div class = "form-row">
<input type = "password" formControlName = "confirmPassword" class = "input-text" placeholder = "Confirm Password" required>
<div *ngIf = "signupForm.controls.confirmPassword.touched && signupForm.hasError('passwordMismatch')" class = "alert alert-danger" role = "alert">
Passwords do not match
</div>
</div>
</div>
<div class = "form-row-last">
<input type = "submit" class = "register" value = "Sign Up">
</div>
</form>
регистрация.comComponent.ts:
import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
@Component({
selector: 'app-signup',
templateUrl: './signup.component.html',
styleUrls: ['./signup.component.css']
})
export class SignupComponent implements OnInit {
signupForm: FormGroup;
userExists = false;
constructor(private formBuilder: FormBuilder) {}
ngOnInit(): void {
this.signupForm = this.formBuilder.group({
name: ['', Validators.required],
email: ['', [Validators.required, Validators.pattern('[^@]+@[^@]+\\.[a-zA-Z]{2,6}')]],
password: ['', Validators.required],
confirmPassword: ['', Validators.required]
}, { validator: this.passwordMatchValidator });
}
async onSubmit(): Promise<void> {
if (this.signupForm.valid) {
const name = this.signupForm.get('name').value;
const email = this.signupForm.get('email').value;
const password = this.signupForm.get('password').value;
const userExists = await this.checkIfUserExists(email);
if (userExists) {
this.userExists = true;
} else {
this.userExists = false;
await this.addNewUser(name, email, password);
await this.registerUser(name, email, password);
this.signupForm.reset();
}
} else {
this.signupForm.markAllAsTouched();
}
}
async checkIfUserExists(email: string): Promise<boolean> {
return false;
}
async addNewUser(name: string, email: string, password: string): Promise<void> {
}
async registerUser(name: string, email: string, password: string): Promise<void> {
}
passwordMatchValidator(formGroup: FormGroup) {
const password = formGroup.get('password').value;
const confirmPassword = formGroup.get('confirmPassword').value;
if (password !== confirmPassword) {
formGroup.get('confirmPassword').setErrors({ passwordMismatch: true });
} else {
formGroup.get('confirmPassword').setErrors(null);
}
}
}
так немного лучше, но есть прб: всякий раз, когда я помещаю курсор в поле ввода, затем удаляю его, ничего не записывая в него, и перед нажатием на кнопку появляются предупреждения, и для каждых двух выровненных полей ввода, если появляется предупреждение одного из них, другое поле ввода становится длиннее, пока его предупреждение не вернется к своему нормальному размеру, не знаю, хорошо ли я объяснил вам эту программу, если вам нужны дополнительные разъяснения, просто скажите мне