A простой способ будет выглядеть следующим образом (упрощен для удобства чтения):
HTML:
<input (focus)="onInputFocused()" (blur)="onInputBlurred()" />
<div class="icon" #icon></div>
TS:
@ViewChild('icon') icon: ElementRef;
onInputFocused() {
this.icon.nativeElement.style.borderBottom = 'orange 1px solid';
}
onInputBlurred() {
this.icon.nativeElement.style.borderBottom = '';
}
Более элегантно:
HTML:
<input (focus)="onInputFocused()" (blur)="onInputBlurred()" />
<div class="icon" [ngClass]={'withBorder': focused}></div>
TS:
focused = false;
onInputFocused() {
this.focused = true;
}
onInputBlurred() {
this.focused = false;
}
CSS:
.withBorder {
border-bottom: orange 1px solid;
}
Без Angular, простое решение CSS (предпочтительно):
HTML:
<div class="has-input">
<input type="text" />
<div class="icon"></div>
</div>
CSS:
.has-input input:focus + .icon {
border-bottom: orange 1px solid;
}