Ya codifiqué el servicio para Async Validator, pero quiero codificar una Directiva genérica para esto. Aquí está mi código;
import { Directive } from '@angular/core'; import {AbstractControl, AsyncValidator, NG_ASYNC_VALIDATORS, ValidationErrors} from "@angular/forms"; import {Observable} from "rxjs"; import {IUser} from "app/core/user/user.model"; import {UserService} from "app/core/user/user.service"; @Directive({ "selector": '[uniqueUsername][ngModel],[uniqueUsername][FormControl]', providers: [ {provide: NG_ASYNC_VALIDATORS, useExisting: UniqueUsernameDirective, multi: true} ] }) export class UniqueUsernameDirective implements AsyncValidator{ constructor(private userService: UserService) { } validate(control: AbstractControl, currentUser?: IUser): Promise<ValidationErrors | null> | Observable<ValidationErrors | null>{ const promise = new Promise<any>((resolve, reject) => { if (currentUser?.login !== control.value) { this.userService.userExits(control.value).subscribe(user => { if (user?.login !== '') { resolve(null); } }, response => { resolve({'loginAlreadyExits': true}); }); } }); return promise; } }Esto es lo que estoy recibiendo error;
/Users/aygunozdemir/IdeaProjects/inuka-ng/src/main/webapp/app/shared/validators/unique-username.directive.ts 10:49 se usó el error 'UniqueUsernameDirective' antes de que se definiera @typescript-eslint/no- usar antes de definir
✖ 1 problema (1 error, 0 advertencias)
Aquí está mi documento; https://weblog.west-wind.com/posts/2019/Nov/18/Creating-Angular-Synchronous-and-Asynchronous-Validators-for-Template-Validation
Además, ¿cómo puedo agregar una entrada a la directiva interna, básicamente?
<input type="text" class="form-control" id="login" name="login" formControlName="login" uniqueUsername[???? shal I put here 'currentUser']>Para usar su directiva de validación de nombre de usuario único dentro de su control de entrada de formulario, aplíquela de la siguiente manera:
<input type="text" class="form-control" id="login" name="login" formControlName="login" uniqueUsername={{currentUser}}>Donde currentUser es una variable dentro de su componente que desea validar.
También recuerde declarar su directiva de validación dentro de su módulo de aplicación:
@NgModule({ declarations: [ . . . UniqueUsernameDirective ], ...