Я пытаюсь отформатировать поле ввода, преобразовав буквы пользователя в действительные инициалы: заглавные буквы, разделенные точкой.
Ввод должен быть отформатирован как пользовательские типы, а не после.
new-customer-form.component.html
<input formatInitials>
format-initials.directive.ts
import { Directive, HostListener } from "@angular/core";
@Directive({
selector: '[formatInitials]'
})
export class FormatInitialsDirective {
@HostListener('keyup', [ '$event' ]) private format(event: KeyboardEvent): void {
const {target} = event;
const {value} = target;
const isAlphabeticKeyCode = event.keyCode >= 65 && event.keyCode <= 90;
if (isAlphabeticKeyCode) { // Only separate with a dot for alphabetic chars
target.value = `${value.toUpperCase()}.`;
}
}
}
КогдаЯ набираю медленно, форматирование работает нормально, но когда я набираю быстрее, форматирование портится, поэтому вместо P.J.S
я получаю PJ.S..
.
Похоже, что ввод обрабатывается до выполнения директивы.Как я могу убедиться, что ввод обрабатывается только после форматирования?