HostBinding
и HostListener
— это декораторы в Angular, которые позволяют взаимодействовать с хост-элементом компонента или директивы. Они обеспечивают удобный способ управления свойствами и событиями элемента, на котором размещена директива или компонент.
@HostBinding()
— это декоратор, который позволяет динамически привязывать свойство класса к атрибуту или свойству DOM хоста.
@Component({
selector: 'app-highlight',
template: '<ng-content></ng-content>'
})
export class HighlightComponent {
@HostBinding('class.active') isActive = false;
@HostBinding('style.color') color = 'red';
@HostBinding('attr.role') role = 'button';
}
В этом примере:
isActive = true
к хосту добавится класс active
red
role="button"
@HostListener()
— это декоратор для подписки на события DOM хоста.
@Directive({
selector: '[appTooltip]'
})
export class TooltipDirective {
@HostListener('mouseenter') onMouseEnter() {
this.showTooltip();
}
@HostListener('mouseleave') onMouseLeave() {
this.hideTooltip();
}
@HostListener('click', ['$event']) onClick(event: MouseEvent) {
console.log('Clicked', event);
}
}
Здесь:
mouseenter
, mouseleave
и click
click
передается объект события через аргументыОсобенность | HostBinding | HostListener |
---|---|---|
Назначение | Привязка свойств | Подписка на события |
Аргументы | Имя свойства/атрибута | Имя события + опциональные параметры |
Обновление | Автоматическое | Только при срабатывании события |
Часто эти декораторы используют вместе:
@Directive({
selector: '[appToggle]'
})
export class ToggleDirective {
@HostBinding('class.active') isActive = false;
@HostListener('click') toggle() {
this.isActive = !this.isActive;
}
}
HostBinding
— для управления свойствами хостаHostListener
— для обработки событий хостаЭти декораторы — мощные инструменты для создания гибких и переиспользуемых компонентов и директив в Angular.