(Angular пользовательская проверка) Поле ввода всегда имеет предыдущее значение вместо обновленного - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть следующая директива, которая отвечает за пользовательскую проверку:

@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. Но это не сработало, потому что роли внутри этого массива всегда сохраняли предыдущее значение имени вместо текущего, как в этом упрощенном примере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...