projects/angular-material-extensions/google-maps-autocomplete/src/lib/directives/address-validator/mat-address-validator.directive.ts
Providers |
{ provide: NG_VALIDATORS, useExisting: forwardRef(() => MatValidateAddressDirective), multi: true }
|
Selector | [mat-address-validate][formControlName],[MatValidateAddress][formControl],[MatValidateAddress][ngModel] |
Properties |
|
Methods |
|
Accessors |
constructor()
|
Public subscribe | ||||||
subscribe(eventEmitter: EventEmitter
|
||||||
Parameters :
Returns :
void
|
Public unsubscribe |
unsubscribe()
|
Returns :
void
|
Public validate |
validate()
|
Returns :
ValidatorFn
|
Private _address |
Type : PlaceResult
|
Public subscription |
Type : any
|
address | ||||
getaddress()
|
||||
setaddress(value)
|
||||
Parameters :
Returns :
void
|
import {Directive, EventEmitter, forwardRef} from '@angular/core';
import {AbstractControl, NG_VALIDATORS, ValidationErrors, Validator, ValidatorFn} from '@angular/forms';
import PlaceResult = google.maps.places.PlaceResult;
// https://github.com/angular/angular/blob/master/packages/forms/src/directives/validators.ts
@Directive({
selector: '[mat-address-validate][formControlName],[MatValidateAddress][formControl],[MatValidateAddress][ngModel]',
providers: [
{provide: NG_VALIDATORS, useExisting: forwardRef(() => MatValidateAddressDirective), multi: true}
]
})
export class MatValidateAddressDirective implements Validator {
public subscription: any;
private _address: PlaceResult;
constructor() {
}
public validate(): ValidatorFn {
return (control: AbstractControl): ValidationErrors | any => {
return this.address ? null : {
validateAddress: {
valid: false
}
};
}
}
public subscribe(eventEmitter: EventEmitter<any>) {
this.subscription = eventEmitter.subscribe((address: PlaceResult) => {
this.address = address;
});
}
public unsubscribe() {
this.subscription.unsubscribe();
}
get address() {
return this._address;
}
set address(value) {
this._address = value;
}
}