2017-08-09 1 views
0

J'ai le validateur asynchrone suivant. Si je veux l'utiliser à une forme réactive, je dois passer comme 3ème param Comment passer un paramètre supplémentaire à un validateur asynchrone (formes réactives) dans Angular?

slug: [null, [Validators.required], [CustomValidators.slug]], 

Comment puis-je passer un param supplémentaire au validateur?

import {FormControl} from "@angular/forms"; 

interface IValidation { 
    [key: string]: boolean; 
} 

export class CustomValidators { 

static slug(control: FormControl) { 
    const q = new Promise<IValidation>((resolve, reject) => { 
     setTimeout(() => { 
      if (control.value === 'TEST') { 
       resolve({'duplicated': true}); 
      } else { 
       resolve(null); 
      } 
     }, 1000); 
    }); 
    return q; 
} 
} 

Si je l'utilise comme

limaces: [null, [Validators.required], [CustomValidators.slug ('string param')]],

le problème est que le premier param est le contrôle.

Répondre

0

Écrivez votre validation comme ceci:

static slug(param: string) { 
    return (control: FormControl) => { 
    const q = new Promise<IValidation>((resolve, reject) => { 
     setTimeout(() => { 
     if (control.value === 'TEST') { 
      resolve({'duplicated': true}); 
     } else { 
      resolve(null); 
     } 
     }, 1000); 
    }); 
    return q; 
    }; 
}