У меня есть следующая директива, которая отвечает за пользовательскую проверку:
@Directive({
selector: '[acUniqueName]',
providers: [{provide: NG_VALIDATORS, useExisting: UniqueNameDirective, multi: true}]
})
export class UniqueNameDirective implements Validator {
@Input('acRole') role: Role;
validate(control: AbstractControl): { [key: string]: any } | null {
console.log(control.value);
console.log(this.role.name);
// logic here
}
}
Я привязываю к нему в поле ввода:
<input type="text" class="form-control" name="test" id="test" [(ngModel)]="customerRole.name" acUniqueName [acRole]="customerRole">
customerRole
является объектом class Role
.
Проблема в том, что всякий раз, когда я набираю что-то в поле ввода, this.role.name
всегда показывает предыдущее значение. Так, например, если у меня есть текст Hello
в поле ввода и я добавляю еще одну букву в Hello1
, тогда control.value
будет правильно назначено правильное новое значение Hello1
, но this.role.name
будет по-прежнему назначаться к предыдущему значению Hello
. Если я тогда наберу Hello12
, this.role.name
будет присвоено Hello1
.
Что может стать причиной того, что входное значение будет все время отставать на один шаг?
PS: исходная проблема заключается в том, что я хотел использовать массив ролей в качестве входных данных и проверить, содержит ли этот массив имя, равное control.value
. Но это не сработало, потому что роли внутри этого массива всегда сохраняли предыдущее значение имени вместо текущего, как в этом упрощенном примере.