[Angular 2] Custom Validtors

本文介绍如何使用Angular实现一个自定义验证器,该验证器只接受以123开头的字符串,并通过HTML和Angular组件集成进行展示。

Create a custom validtor which only accepts the string start with '123';

    function skuValidator(control){
         if(!control.value.match(/^123/)){
             return {invalidSku: true};
         }
    }

If it not start with 123, then return the object {invalidSku: true}, which later will be used in the html.

 

To use this validtor:

        this.myForm = fb.group({
            "sku": ["", Validators.compose([
                Validators.required,
                skuValidator
            ])]
        });

Use Validators.compose([...]) to accpet mutli valiators.

 

In HTML:

            <div *ng-if="sku.control.hasError('invalidSku')">
                SKU is required
            </div>

 

Code: 

import {Component, View, FORM_DIRECTIVES, Validators, FormBuilder, NgIf} from 'angular2/angular2';

@Component({
    selector: 'demo-form-sku'
})
@View({
    directives: [FORM_DIRECTIVES, NgIf],
    template: `
       <div>
        <h2>Demo Form: Sku</h2>
        <!-- ngForm is attched to the form, and #f="form" form is also come from ngForm-->
        <form [ng-form-model]="myForm"
        (submit)="onSubmit(myForm.value)">
            <div class="form-group" [class.has-error]="!sku.valid && sku.touched">
                <label for="skuInput">SKU</label>
                <input type="text"
                class="form-control"
                id="skuInput"
                #sku = "form"
                placeholder="SKU"
                [ng-form-control]="myForm.controls['sku']">
            </div>
            <div *ng-if="!sku.control.valid"
               class="bg-warning">SKU is invalid</div>
            <button type="submit" class="btn btn-default">Submit
            </button>
            <div *ng-if="sku.control.hasError('invalidSku')">
                SKU is required
            </div>

        </form>
        <div *ng-if="!myForm.valid"
              class="bg-warning">Form is invalid</div>
       </div>
    `
})

export class DemoFormSku {
    myForm: ControlGroup;
    constructor(fb:FormBuilder) {
        this.myForm = fb.group({
            "sku": ["", Validators.compose([
                Validators.required,
                skuValidator
            ])]
        });
        this.sku = this.myForm.controls['sku'];
    }

    onSubmit(value){
        console.log(value);
    }
    
    function skuValidator(control){
         if(!control.value.match(/^123/)){
             return {invalidSku: true};
         }
    }
}

 

转载于:https://www.cnblogs.com/Answer1215/p/4948867.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值