Angular 5 可选字段的表单验证

Angular 5 Form validation for optional fields

好的,所以我是 Angular 的新手(我正在使用 Angular 5)。我正在尝试实施表单验证 这样我就有两个输入字段,其中: - 用户必须在提交表单之前使用一个或两个字段。 - 两个字段都必须遵循模式 \w{10} - 在满足验证标准之前,提交按钮必须保持禁用状态 - 每个字段下方都需要有一条消息,将格式错误的输入描述为 发生了。

我已经设法在模式匹配和禁用提交按钮方面取得了一些进展....但我很难弄清楚提供这样的功能 一个用户选择只填写一个字段并启用提交按钮......我似乎只能在两个字段都被使用时让它工作。

<!--my view code/mark up.... -->


<div>
  <h3>Angular  Template Form validation </h3>
  <form #userlogin = "ngForm" (ngSubmit) = "onClickSubmit(userlogin.value)" novalidate >
    <p>Is "userlogin" valid? {{userlogin.valid}}</p>
    <input type = "text" name = "emailId" placeholder = "emailId" ngModel required   pattern = "\w+\@\w+\.\w+" />
    <br/>
    <input type = "password" name = "passwd" placeholder = "passwd" ngModel   pattern ="\w{10}"/>
    <br/>
    <input type = "submit"  [disabled] = "!userlogin.valid"  value = "submit">
 </form>
</div>


import { Component, OnInit ,ANALYZE_FOR_ENTRY_COMPONENTS } from '@angular/core';
import { FormGroup, FormControl,FormArray,NgForm, Validators} from '@angular/forms';
import {Report} from './report.model';
@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {

      constructor() {}

      ngOnInit() {
        this.report = new Report() ;
        this.isDisabled = false ;
      }


     onClickSubmit(data) {
        let email = data.emailId ;
        let passwd = data.passwd ;
        email = email.trim() ;
        passwd = passwd.trim() ;
        console.log(email);
        this.emailFlag = this.regexpEmail.test(email);
        // alert('Entered Email id : ' + this.emailFlag);
        alert('Email -> ' + email + ': ' + 'passwd :' + passwd );

      }

}

任何帮助将不胜感激!!!谢谢!!!

尝试下面给出的代码:

模板:

<div>
  <h3>Angular  Template Form validation </h3>
  <form #userlogin = "ngForm" (ngSubmit) = "onClickSubmit(userlogin.value)" novalidate >
    <p>Is "userlogin" valid? {{userlogin.valid}}</p>
    <input type = "text" name = "emailId" placeholder = "emailId" [(ngModel)]="emailid"  pattern = "\w+\@\w+\.\w+" />
    <br/>
    <input type = "password" name = "passwd" placeholder = "passwd" [(ngModel)]="pwd"  pattern ="\w{10}"/>
    <br/>
    <input type = "submit"  [disabled] = "(!emailid && !pwd) || !userlogin.valid"  value = "submit">
 </form>
</div>

组件-

import { Component, OnInit ,ANALYZE_FOR_ENTRY_COMPONENTS } from '@angular/core';
import { FormGroup, FormControl,FormArray,NgForm, Validators} from '@angular/forms';
import {Report} from './report.model';
@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
  emailid;
  pwd;
      constructor() {}

      ngOnInit() {
        this.report = new Report() ;
        this.isDisabled = false ;
      }

     onClickSubmit(data) {
        let email = data.emailId ;
        let passwd = data.passwd ;
        email = email.trim() ;
        passwd = passwd.trim() ;
        console.log(email);
        this.emailFlag = this.regexpEmail.test(email);
        // alert('Entered Email id : ' + this.emailFlag);
        alert('Email -> ' + email + ': ' + 'passwd :' + passwd );

      }

}