您可以始終執行您自己的requiredNumber
指令來申請。
唯一特別的是它明確尋找未初始化的null
,control.value
將被設置爲數字輸入。
要求,number.validator.ts
import { Directive, Input, OnChanges, SimpleChanges } from '@angular/core';
import { AbstractControl, NG_VALIDATORS, Validator, Validators, ValidatorFn } from '@angular/forms';
function validateRequiredNumberFactory() : ValidatorFn {
return (control: AbstractControl) => {
let isValid = !isNaN(control.value) && control.value !== null;
console.log('isNaN: ' + isNaN(control.value));
if(isValid) {
return null;
}
return { numberIsRequired: true };
}
}
@Directive({
selector: '[requiredNumber][ngModel]',
providers: [{provide: NG_VALIDATORS, useExisting: RequiredNumberValidatorDirective, multi: true}]
})
export class RequiredNumberValidatorDirective implements Validator, OnChanges {
private valFn = Validators.nullValidator;
constructor() {
this.valFn = validateRequiredNumberFactory();
}
validate(control: AbstractControl): {[key: string]: any} {
return this.valFn(control);
}
}
輸入是這樣的:
<input requiredNumber name="someName" [(ngModel)]="myProperty" #namedInput="ngModel"/>
這裏有一個plunker在那裏你可以調整自己的喜好http://plnkr.co/edit/gxTxOQBg8ilFHzgq4Ly0
信貸,這是由於,這個答案來源於:http://juristr.com/blog/2016/11/ng2-template-driven-form-validators/
因爲我主要利用Reactive Forms和我的驗證器完成代碼和模板之外的工作。