Angular 2 has two kinds of custom validators. Synchronous validators as in the first example that will run directly on the client and asynchronous validators (the second example) that you can use to call a remote service to do the validation for you. In this example the validator should call the server to see if a value is unique.
export class CustomValidators {
static cannotContainSpace(control: Control) {
if (control.value.indexOf(' ') >= 0)
return { cannotContainSpace: true };
return null;
}
static shouldBeUnique(control: Control) {
return new Promise((resolve, reject) => {
// Fake a remote validator.
setTimeout(function () {
if (control.value == "exisitingUser")
resolve({ shouldBeUnique: true });
else
resolve(null);
}, 1000);
});
}}
If your control value is valid you simply return null to the caller. Otherwise you can return an object which describes the error.