加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Angular2表单中的自定义验证

发布时间:2020-12-17 17:07:41 所属栏目:安全 来源:网络整理
导读:按照这里的例子: https://angular.io/docs/ts/latest/guide/forms.html 我的表格如下: input type="text" class="form-control" id="name" required [(ngModel)]="model.name" name="name" #name="ngModel" div [hidden]="name.valid || name.pristine" cl
按照这里的例子:

https://angular.io/docs/ts/latest/guide/forms.html

我的表格如下:

<input type="text" class="form-control" id="name"
               required
               [(ngModel)]="model.name" name="name"
               #name="ngModel" >
        <div [hidden]="name.valid || name.pristine" 
             class="alert alert-danger">

我想为此表单添加一些自定义验证.我确实找到了一些关于使用ngFormModel和FormBuilders和Validation类的建议,不过我相信这些已经过时了,不再推荐

(http://almerosteyn.com/2016/03/angular2-form-validation-component)

那么我的问题是如何添加自定义验证.

在angular 1.x中,我曾经将函数添加到ngModel.$parsers和ngModel.$formatters管道.角度2的等价物是多少?

解决方法

我是通过使用模型驱动的方法而不是模板驱动的方法来实现的.例如:

形成

<form [formGroup]="myForm">
    <label for="id-name">Name</label>
    <input type="text" id="id-name" formControlName="name">
    <label for="id-age">Age</label>
    <input type="text" id="id-age" formControlName="age">
</form>

零件

export class MyComponent implements OnInit {
    myForm:FormGroup;

    ngOnInit() {
        let fuv = FormUtils.validators;

        this.myForm = this.formBuilder.group({
            name: ['',Validators.required],age: ['',[Validators.required,fuv.isNumber]],});
    }
}

FormUtils

type ValidatorResult = {[key:string]:any};

function _isNumber(control:AbstractControl):ValidatorResult {
    let v = control.value;
    if (isPresent(v) && !isNumber(v) && !isEmptyString(v)) {
        return {'isNumber': false};
    }
    return null;
}

export class FormUtils {
      static validators = {
        isNumber: _isNumber
      }
}

在这里,isPresent,isNumber和isEmptyString非常简单:

isPresent(obj) --> return obj !== undefined && obj !== null;
isNumber(obj) --> return (typeof obj === 'number' && !isNaN(obj));
isEmptyString(obj) --> return obj === '';

目前,Angular 2为您提供了四个有用的验证器:required,minLength,maxLength和pattern.最后一个非常强大.您可以按照与上述_isNumber类似的模式编写自己的验证器.如果您的验证器需要一个参数(例如lessThan),那么您可以使用与此类似的模式:

function lessThan(maxVal:number):ValidatorFn {
    return (control:AbstractControl):ValidatorResult => {
        let value = control.value;

        if (isPresent(value) && !isEmptyString(value) && isNumber(value) && parseInt(value) >= maxValue) {
            return {'lessThan': {'maxValue': maxValue,'actual': value}};
        }

        return null;
    };
}

我知道这种方法(模型驱动)与您在问题中发布的形式(模板驱动)不同.无论如何,我希望它有所帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读