Hai controllato questi documenti ufficiali?
HostListener : dichiara un listener host. Angular invocherà il metodo decorato quando l'elemento host emette l'evento specificato.
@HostListener
- ascolterà l'evento emesso dall'elemento host dichiarato con @HostListener
.
HostBinding : dichiara un'associazione di proprietà host. Angular controlla automaticamente i binding delle proprietà dell'host durante il rilevamento delle modifiche. Se un'associazione cambia, aggiornerà l'elemento host della direttiva.
@HostBinding
- vincolerà la proprietà all'elemento host, se un'associazione cambia, HostBinding
aggiornerà l'elemento host.
NOTA: entrambi i collegamenti sono stati rimossi di recente. La parte " HostBinding-HostListening " della guida di stile può essere un'alternativa utile fino alla restituzione dei collegamenti.
Ecco un semplice esempio di codice per aiutare a capire cosa significa:
DEMO: Ecco la demo live in plunker - "Un semplice esempio di @HostListener & @HostBinding"
- Questo esempio associa una
role
proprietà - dichiarata con @HostBinding
- all'elemento host
- Ricordiamo che
role
è un attributo, poiché stiamo usando attr.role
.
<p myDir>
diventa <p mydir="" role="admin">
quando lo visualizzi negli strumenti di sviluppo.
- Quindi ascolta l'
onClick
evento dichiarato con @HostListener
, associato all'elemento host del componente, cambiando role
ad ogni clic.
- Il cambiamento quando la
<p myDir>
si fa clic è che il suo tag di apertura cambia da <p mydir="" role="admin">
a <p mydir="" role="guest">
e ritorno.
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 {}