forms - 验证器的最小和最大数量 Angular 4

标签 forms angular validation

是否可以选择验证器的最小和最大数字,即0到200之间的数字?

对话框结果组件

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



@Component({
  selector: 'app-dialog-result',
  templateUrl: './dialog-result.component.html',
})

export class DialogResultComponent {


  form: FormGroup;
  name = new FormControl('',Validators.required);
  width = new FormControl('',Validators.required);
  height = new FormControl('',Validators.required);
  constructor(public dialogRef: MdDialogRef<DialogResultComponent>,private fb: FormBuilder) {

  }

  ngOnInit() {
  this.form = this.fb.group({
      'name':    this.name,
      'width':   this.width,
      'height':  this.height,
    });
}

  saveData(){
    this.dialogRef.close({name:this.name,width:this.width,height:this.height});
  }
}


dialog-result.component.html

       <form [formGroup]="form">
     <h3>MineSweeperwix</h3>
      <div class="mdl-dialog__content">
                <p><mdl-textfield type="text" label="name" formControlName="name" floating-label autofocus></mdl-textfield></p>
                <mdl-textfield type="number" formControlName="width" min="0" max="350" label="width"   floating-label autofocus></mdl-textfield>
               <mdl-textfield type="number" formControlName="height" label="height" min="0" max="350" floating-label autofocus  error-msg="'Please provide a correct email!'"></mdl-textfield>
      </div>
      <div class="mdl-dialog__actions">
        <button mdl-button (click)="saveData()" mdl-button-type="raised" mdl-colored="primary" mdl-ripple [disabled]="!form.valid">Save</button>
        <button mdl-button (click)="dialogRef.close(dd)" mdl-button-type="raised" mdl-ripple>Cancel</button>
      </div>
   </form>


最小和最大值进入mdl-text-field

min="0" max="200" floating-label autofocus


限制用户在范围之间写入数字,但是可以按下保存按钮,这不是我想要的。我希望用户可以在所有表​​格均有效的情况下按保存按钮。

我试图做的是

dialog.result.component.ts

    import { Component, OnInit } from '@angular/core';
import { MdDialog, MdDialogRef } from '@angular/material';
import { FormGroup,FormControl,Validators,FormBuilder,ValidatorFn,AbstractControl  } from '@angular/forms';
import { NumberValidators } from '../validators/NumberValidators.module';


@Component({
  selector: 'app-dialog-result',
  templateUrl: './dialog-result.component.html',
})

export class DialogResultComponent {


  form: FormGroup;
  name = new FormControl('',Validators.required);
  width = new FormControl('',[Validators.required,NumberValidators.range(3,300)]);
  height = new FormControl('',[Validators.required,NumberValidators.range(3,300)]);
  constructor(public dialogRef: MdDialogRef<DialogResultComponent>,private fb: FormBuilder) {

  }

  ngOnInit() {
  this.form = this.fb.group({
      'name' :this.name,
      'width': this.width,
      'height':  this.height
    });
}

  saveData(){
    console.log(this.name.value);
    this.dialogRef.close({name:this.name.value,width:this.width.value,height:this.height.value});
  }

}


NumberValidators.module.ts

import { AbstractControl, ValidatorFn } from '@angular/forms';

export class NumberValidators {

    static range(min: number, max: number): ValidatorFn {
        console.log(min+max);
        return (c: AbstractControl): { [key: string]: boolean } | null => {
            if (c.value && (isNaN(c.value) || c.value < min || c.value > max)) {
                return { 'range': true };
            }
            return null;
        };
    }


}

但这行不通,有人有建议吗?

最佳答案

您可以编写自己的数字验证器。像这样:

import { AbstractControl, ValidatorFn } from '@angular/forms';

export class NumberValidators {

    static range(min: number, max: number): ValidatorFn {
        return (c: AbstractControl): { [key: string]: boolean } | null => {
            if (c.value && (isNaN(c.value) || c.value < min || c.value > max)) {
                return { 'range': true };
            }
            return null;
        };
    }
}

关于forms - 验证器的最小和最大数量 Angular 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43808780/

相关文章:

c# - ASP.NET MVC 中的 ViewModel 验证最佳实践

python - 如何验证字符串是否正确的日期格式

javascript - enctype = "multipart/form-data"在 ie9 和 chrome 之间工作不同

javascript - 如何使用 *ngFor 和 *ngIf Angular 4 将数据传递到不同的模板

java - Spring Validation 在我的消息代码中添加后缀

node.js - 如何直接在 Angular 4/expressJS 服务器中运行项目(无需 webpack)

javascript - 到达 API 端点的 Angular Material 数据表

javascript - 将作为字符串存储在变量中的 url 传递给表单的 onsubmit

PHP 到 MySql 表单处理多个选择复选框

javascript - 如何在 Javascript 方程中引用表单字段?