Если вы даете каждому входу индекс, у вас может быть одна локальная переменная, которая управляет ссылкой на фокусированный вход.
foccused: number | string;
Затем вы можете использовать [ngClass]
, чтобы применить границу к родительскому элементу с помощью чего-то вроде:
<div class="parent-element" [ngClass]="{ 'bordered' : isFocussed(1) }">
Поэтому вместо установки логического значения вы устанавливаете число с помощью addBorder(1)
, например.
<div class="parent-element" [ngClass]="{ 'bordered' : isFocussed(1) }">
<input type="text"
(focus)="addBorder(1)"
(blur)="removeBorder()"/>
</div>
Где addBorder()
становится:
addBorder(index: number) {
this.foccused = index;
}
Вот стек, который показывает вам, как: https://stackblitz.com/edit/angular-qqwqjd
Вы можете сделать некоторыеболее причудливые вещи с ElementRef
и Renderer2
, но для того, что вам нужно, вышеуказанного должно быть достаточно.
Этот способ сопровождается дополнительным бонусом возможности расширения в цикле, если у вас есть массиввходы, которые вы хотели выводить один за другим, просто замените индекс на индекс, предоставленный *ngFor