Странные ошибки с проверкой Angular Reactive Forms

Я тестирую простую функцию входа в систему в форме компонента моей страницы продуктов, используя Angular 7, и у меня такое странное поведение. Я пытаюсь отобразить соответствующие сообщения проверки, если существует ошибка, например, если это недействительный адрес электронной почты, должно отображаться сообщение «должен быть действительный адрес электронной почты», а если поле оставлено пустым, должна отображаться ошибка «электронная почта требуется», и когда вы начинаете печатать, отображается требуемое сообщение исчезает и отображается только действительное сообщение об ошибке электронной почты. Это мой код.

Addproduct.component.html

Итак, теперь я пытаюсь отобразить сообщения span, если ошибка существует, но она не работает.

<form [formGroup] = "loginForm" class = "login-container" (ngSubmit) = "login()">            
    <p>
        <input class = "form-control" type = "email" placeholder = "Email here" formControlName = "email">
        <span *ngIf = "f.email.errors.required">email is required</span>
        <span *ngIf = "f.email.errors.email">must be a valid email</span>
    </p>            
    <p>
        <input class = "form-control" type = "password" placeholder = "Password here" formControlName = "password">
        <span *ngIf = "f.password.errors.required">Password is required</span>
    </p>
    <p><button type = "submit" class = "btn btn-md btn-primary">Submit</button></p>        
</form>

Добавитьпродукт.component.ts

и это контроллер, я пытался использовать краткую нотацию для правил проверки, но пока безрезультатно.

import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';

@Component({
  selector: 'app-addproduct',
  templateUrl: './addproduct.component.html',
  styleUrls: ['./addproduct.component.css']
})
export class AddproductComponent implements OnInit {

  loginForm:FormGroup;
  isSubmitted:boolean = false;

  constructor(
    private router:Router,
    private fb:FormBuilder
  ){}

  ngOnInit() { 
    this.loginForm = this.fb.group({           
      email : ['',  [Validators.required,Validators.email]],    
      password : ['', [Validators.required,Validators.min(6)]]
    });
  }

  get f(){
    return this.loginForm.controls;
  }

}

Я также изменил сценарии проверки на это, но все равно безрезультатно

ngOnInit() { 
   this.loginForm = this.fb.group({           
      email : new FormControl('',  [Validators.required,Validators.email]),    
      password : new FormControl('', [Validators.required,Validators.min(6)])
   });
}

и я получаю эту ошибку

Странные ошибки с проверкой Angular Reactive Forms

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
1 234
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Вы проверяете наличие ошибки там, где ошибки может и не быть.

Вы хотите что-то вроде этого:

f.email.errors?.required

Или даже:

f.email?.errors?.required

Сделайте то же самое для поля пароля и в любом другом месте, где свойство может не существовать при первом вызове.

Вы также можете использовать

<span *ngIf = "loginForm.hasError('required', ['password'])">Password is required</span>

На мой взгляд, это намного проще.

приятно знать, я думаю, что я бы пошел с первым, но спасибо за ваше мнение, должным образом отмеченное.

Ande Caleb 23.07.2019 14:36

@Andaeiii Я рад, что смог помочь.

NTP 23.07.2019 14:37

эй @Andaeiii, если вы решили использовать мой ответ, отметьте его как принятый. Спасибо :)

Peter David Carter 23.07.2019 14:45

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