Вы проверили эти официальные документы?
HostListener - объявляет хост-слушатель. Angular будет вызывать оформленный метод, когда хост-элемент генерирует указанное событие.
@HostListener
- будет прослушивать событие, генерируемое элементом host, объявленным с @HostListener
.
HostBinding - объявляет привязку свойства хоста. Angular автоматически проверяет привязки свойств хоста во время обнаружения изменений. Если привязка изменится, она обновит хост-элемент директивы.
@HostBinding
- свяжет свойство с элементом host. Если привязка изменится, HostBinding
обновит элемент host.
ПРИМЕЧАНИЕ. Обе ссылки были недавно удалены. Часть " HostBinding-HostListening " руководства по стилю может быть полезной альтернативой, пока ссылки не вернутся.
Вот простой пример кода, чтобы помочь понять, что это значит:
ДЕМО: Вот демо-версия live in plunker - «Простой пример @HostListener & @HostBinding»
- В этом примере привязывается
role
свойство - объявлено с @HostBinding
- к элементу хоста
- Напомним, что
role
это атрибут, так как мы используем attr.role
.
<p myDir>
становится, <p mydir="" role="admin">
когда вы просматриваете его в инструментах разработчика.
- Затем он прослушивает
onClick
событие, объявленное с помощью @HostListener
, прикрепленного к элементу хоста компонента, и изменяется role
с каждым щелчком.
- Изменение при
<p myDir>
нажатии заключается в том, что его открывающий тег изменяется с <p mydir="" role="admin">
на <p mydir="" role="guest">
и обратно.
directives.ts
import {Component,HostListener,Directive,HostBinding,Input} from '@angular/core';
@Directive({selector: '[myDir]'})
export class HostDirective {
@HostBinding('attr.role') role = 'admin';
@HostListener('click') onClick() {
this.role= this.role === 'admin' ? 'guest' : 'admin';
}
}
AppComponent.ts
import { Component,ElementRef,ViewChild } from '@angular/core';
import {HostDirective} from './directives';
@Component({
selector: 'my-app',
template:
`
<p myDir>Host Element
<br><br>
We have a (HostListener) listening to this host's <b>click event</b> declared with @HostListener
<br><br>
And we have a (HostBinding) binding <b>the role property</b> to host element declared with @HostBinding
and checking host's property binding updates.
If any property change is found I will update it.
</p>
<div>View this change in the DOM of the host element by opening developer tools,
clicking the host element in the UI.
The role attribute's changes will be visible in the DOM.</div>
`,
directives: [HostDirective]
})
export class AppComponent {}