Почему форма всегда недействительна после ее отправки?

регистрация.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-код (я хочу, чтобы оповещения появлялись сразу после нажатия кнопки, а затем исчезали после повторного заполнения полей, или вы можете делать все, что хотите, если у вас есть идея получше)

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
0
65
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В вашем файле 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);
        }
    }
}

так немного лучше, но есть прб: всякий раз, когда я помещаю курсор в поле ввода, затем удаляю его, ничего не записывая в него, и перед нажатием на кнопку появляются предупреждения, и для каждых двух выровненных полей ввода, если появляется предупреждение одного из них, другое поле ввода становится длиннее, пока его предупреждение не вернется к своему нормальному размеру, не знаю, хорошо ли я объяснил вам эту программу, если вам нужны дополнительные разъяснения, просто скажите мне

Mohamed Seif Ben Salah 09.07.2024 15:21

Другие вопросы по теме