Skip to content

Commit

Permalink
Merge branch 'master' into master
Browse files Browse the repository at this point in the history
  • Loading branch information
yuyang041060120 authored Feb 15, 2017
2 parents 60f3d84 + 6baf63a commit e75fe5e
Show file tree
Hide file tree
Showing 17 changed files with 251 additions and 2 deletions.
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# v3.4.0

add lt and gt validator

# v3.5.0

re-trigger validate when validate-property change
28 changes: 28 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,9 @@ npm install ng2-validation --save

- rangeLength
- min
- gt
- max
- lt
- range
- digits
- number
Expand Down Expand Up @@ -77,13 +79,27 @@ export class AppModule {
<p *ngIf="field.errors?.min">error message</p>
```

### gt

```html
<input type="number" [(ngModel)]="model.field" name="field" #field="ngModel" [gt]="10"/>
<p *ngIf="field.errors?.gt">error message</p>
```

### max

```html
<input type="number" [(ngModel)]="model.field" name="field" #field="ngModel" [max]="20"/>
<p *ngIf="field.errors?.max">error message</p>
```

### lt

```html
<input type="number" [(ngModel)]="model.field" name="field" #field="ngModel" [lt]="20"/>
<p *ngIf="field.errors?.lt">error message</p>
```

### range

```html
Expand Down Expand Up @@ -301,12 +317,24 @@ new FormControl('', CustomValidators.rangeLength([5, 9]))
new FormControl('', CustomValidators.min(10))
```

### gt

```javascript
new FormControl('', CustomValidators.gt(10))
```

### max

```javascript
new FormControl('', CustomValidators.max(20))
```

### lt

```javascript
new FormControl('', CustomValidators.lt(20))
```

### range

```javascript
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "ng2-validation",
"version": "3.3.0",
"version": "3.6.1",
"description": "angular2 validation",
"main": "dist/index.js",
"typings": "dist/index.d.ts",
Expand Down
24 changes: 24 additions & 0 deletions src/custom-validators.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,30 @@ export class CustomValidators {
};
}

/**
* Validator that requires controls to have a value greater than a gt value.
*/
static gt(gt: number): ValidatorFn {
return (control: AbstractControl): {[key: string]: any} => {
if (isPresent(Validators.required(control))) return null;

let v: number = control.value;
return v > gt ? null : {'gt': true};
};
}

/**
* Validator that requires controls to have a value less than a lt value.
*/
static lt(lt: number): ValidatorFn {
return (control: AbstractControl): {[key: string]: any} => {
if (isPresent(Validators.required(control))) return null;

let v: number = control.value;
return v < lt ? null : {'lt': true};
};
}

/**
* Validator that requires controls to have a value of a range value.
*/
Expand Down
4 changes: 4 additions & 0 deletions src/directives.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@ import { NgModule, Directive } from '@angular/core';

import { RangeLengthValidator } from './directives/range-length';
import { MinValidator } from './directives/min';
import { GreaterThanValidator } from './directives/greater-than';
import { MaxValidator } from './directives/max';
import { LessThanValidator } from './directives/less-than';
import { RangeValidator } from './directives/range';
import { DigitsValidator } from './directives/digits';
import { NumberValidator } from './directives/number';
Expand All @@ -24,7 +26,9 @@ import { NotEqualToValidator } from './directives/not-equal-to';
export const CUSTOM_FORM_DIRECTIVES: Directive[] = [
RangeLengthValidator,
MinValidator,
GreaterThanValidator,
MaxValidator,
LessThanValidator,
RangeValidator,
DigitsValidator,
NumberValidator,
Expand Down
6 changes: 6 additions & 0 deletions src/directives/equal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ export class EqualValidator implements Validator, OnInit, OnChanges {
@Input() equal: any;

private validator: ValidatorFn;
private onChange: () => void;

ngOnInit() {
this.validator = CustomValidators.equal(this.equal);
Expand All @@ -26,11 +27,16 @@ export class EqualValidator implements Validator, OnInit, OnChanges {
for (let key in changes) {
if (key === 'equal') {
this.validator = CustomValidators.equal(changes[key].currentValue);
if (this.onChange) this.onChange();
}
}
}

validate(c: AbstractControl): {[key: string]: any} {
return this.validator(c);
}

registerOnValidatorChange(fn: () => void): void {
this.onChange = fn;
}
}
42 changes: 42 additions & 0 deletions src/directives/greater-than.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import { Directive, Input, forwardRef, OnInit, OnChanges, SimpleChanges } from '@angular/core';
import { NG_VALIDATORS, Validator, ValidatorFn, AbstractControl } from '@angular/forms';

import { CustomValidators } from '../index';

const GREATER_THAN_VALIDATOR: any = {
provide: NG_VALIDATORS,
useExisting: forwardRef(() => GreaterThanValidator),
multi: true
};

@Directive({
selector: '[gt][formControlName],[gt][formControl],[gt][ngModel]',
providers: [GREATER_THAN_VALIDATOR]
})
export class GreaterThanValidator implements Validator, OnInit, OnChanges {
@Input() gt: number;

private validator: ValidatorFn;
private onChange: () => void;

ngOnInit() {
this.validator = CustomValidators.gt(this.gt);
}

ngOnChanges(changes: SimpleChanges) {
for (let key in changes) {
if (key === 'gt') {
this.validator = CustomValidators.gt(changes[key].currentValue);
if (this.onChange) this.onChange();
}
}
}

validate(c: AbstractControl): {[key: string]: any} {
return this.validator(c);
}

registerOnValidatorChange(fn: () => void): void {
this.onChange = fn;
}
}
42 changes: 42 additions & 0 deletions src/directives/less-than.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import { Directive, Input, forwardRef, OnInit, OnChanges, SimpleChanges } from '@angular/core';
import { NG_VALIDATORS, Validator, ValidatorFn, AbstractControl } from '@angular/forms';

import { CustomValidators } from '../index';

const LESS_THAN_VALIDATOR: any = {
provide: NG_VALIDATORS,
useExisting: forwardRef(() => LessThanValidator),
multi: true
};

@Directive({
selector: '[lt][formControlName],[lt][formControl],[lt][ngModel]',
providers: [LESS_THAN_VALIDATOR]
})
export class LessThanValidator implements Validator, OnInit, OnChanges {
@Input() lt: number;

private validator: ValidatorFn;
private onChange: () => void;

ngOnInit() {
this.validator = CustomValidators.lt(this.lt);
}

ngOnChanges(changes: SimpleChanges) {
for (let key in changes) {
if (key === 'lt') {
this.validator = CustomValidators.lt(changes[key].currentValue);
if (this.onChange) this.onChange();
}
}
}

validate(c: AbstractControl): {[key: string]: any} {
return this.validator(c);
}

registerOnValidatorChange(fn: () => void): void {
this.onChange = fn;
}
}
6 changes: 6 additions & 0 deletions src/directives/max-date.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ export class MaxDateValidator implements Validator, OnInit, OnChanges {
@Input() maxDate;

private validator: ValidatorFn;
private onChange: () => void;

ngOnInit() {
this.validator = CustomValidators.maxDate(this.maxDate);
Expand All @@ -26,11 +27,16 @@ export class MaxDateValidator implements Validator, OnInit, OnChanges {
for (let key in changes) {
if (key === 'maxDate') {
this.validator = CustomValidators.maxDate(changes[key].currentValue);
if (this.onChange) this.onChange();
}
}
}

validate(c: AbstractControl): {[key: string]: any} {
return this.validator(c);
}

registerOnValidatorChange(fn: () => void): void {
this.onChange = fn;
}
}
6 changes: 6 additions & 0 deletions src/directives/max.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ export class MaxValidator implements Validator, OnInit, OnChanges {
@Input() max: number;

private validator: ValidatorFn;
private onChange: () => void;

ngOnInit() {
this.validator = CustomValidators.max(this.max);
Expand All @@ -26,11 +27,16 @@ export class MaxValidator implements Validator, OnInit, OnChanges {
for (let key in changes) {
if (key === 'max') {
this.validator = CustomValidators.max(changes[key].currentValue);
if (this.onChange) this.onChange();
}
}
}

validate(c: AbstractControl): {[key: string]: any} {
return this.validator(c);
}

registerOnValidatorChange(fn: () => void): void {
this.onChange = fn;
}
}
6 changes: 6 additions & 0 deletions src/directives/min-date.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ export class MinDateValidator implements Validator, OnInit, OnChanges {
@Input() minDate;

private validator: ValidatorFn;
private onChange: () => void;

ngOnInit() {
this.validator = CustomValidators.minDate(this.minDate);
Expand All @@ -26,11 +27,16 @@ export class MinDateValidator implements Validator, OnInit, OnChanges {
for (let key in changes) {
if (key === 'minDate') {
this.validator = CustomValidators.minDate(changes[key].currentValue);
if (this.onChange) this.onChange();
}
}
}

validate(c: AbstractControl): {[key: string]: any} {
return this.validator(c);
}

registerOnValidatorChange(fn: () => void): void {
this.onChange = fn;
}
}
6 changes: 6 additions & 0 deletions src/directives/min.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ export class MinValidator implements Validator, OnInit, OnChanges {
@Input() min: number;

private validator: ValidatorFn;
private onChange: () => void;

ngOnInit() {
this.validator = CustomValidators.min(this.min);
Expand All @@ -26,11 +27,16 @@ export class MinValidator implements Validator, OnInit, OnChanges {
for (let key in changes) {
if (key === 'min') {
this.validator = CustomValidators.min(changes[key].currentValue);
if (this.onChange) this.onChange();
}
}
}

validate(c: AbstractControl): {[key: string]: any} {
return this.validator(c);
}

registerOnValidatorChange(fn: () => void): void {
this.onChange = fn;
}
}
6 changes: 6 additions & 0 deletions src/directives/phone.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ export class PhoneValidator implements Validator, OnInit, OnChanges {
@Input() phone: string;

private validator: ValidatorFn;
private onChange: () => void;

ngOnInit() {
this.validator = CustomValidators.phone(this.phone);
Expand All @@ -26,11 +27,16 @@ export class PhoneValidator implements Validator, OnInit, OnChanges {
for (let key in changes) {
if (key === 'phone') {
this.validator = CustomValidators.phone(changes[key].currentValue);
if (this.onChange) this.onChange();
}
}
}

validate(c: AbstractControl): {[key: string]: any} {
return this.validator(c);
}

registerOnValidatorChange(fn: () => void): void {
this.onChange = fn;
}
}
6 changes: 6 additions & 0 deletions src/directives/range-length.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ export class RangeLengthValidator implements Validator, OnInit, OnChanges {
@Input() rangeLength: [number];

private validator: ValidatorFn;
private onChange: () => void;

ngOnInit() {
this.validator = CustomValidators.rangeLength(this.rangeLength);
Expand All @@ -26,11 +27,16 @@ export class RangeLengthValidator implements Validator, OnInit, OnChanges {
for (let key in changes) {
if (key === 'rangeLength') {
this.validator = CustomValidators.rangeLength(changes[key].currentValue);
if (this.onChange) this.onChange();
}
}
}

validate(c: AbstractControl): {[key: string]: any} {
return this.validator(c);
}

registerOnValidatorChange(fn: () => void): void {
this.onChange = fn;
}
}
Loading

0 comments on commit e75fe5e

Please sign in to comment.