¿Has consultado estos documentos oficiales?
HostListener : declara un escucha de host. Angular invocará el método decorado cuando el elemento host emite el evento especificado.
@HostListener
- escuchará el evento emitido por el elemento host que se declara con @HostListener
.
HostBinding : declara un enlace de propiedad de host. Angular verifica automáticamente los enlaces de propiedades del host durante la detección de cambios. Si un enlace cambia, actualizará el elemento host de la directiva.
@HostBinding
- enlazará la propiedad al elemento host. Si cambia un enlace, HostBinding
actualizará el elemento host.
NOTA: Ambos enlaces se han eliminado recientemente. La parte " HostBinding-HostListening " de la guía de estilo puede ser una alternativa útil hasta que regresen los enlaces.
Aquí hay un ejemplo de código simple para ayudar a imaginar lo que esto significa:
DEMO: Aquí está la demostración en vivo en plunker - "Un ejemplo simple sobre @HostListener y @HostBinding"
- Este ejemplo vincula una
role
propiedad, declarada con @HostBinding
, al elemento del host
- Recordemos que
role
es un atributo, ya que estamos usando attr.role
.
<p myDir>
se convierte <p mydir="" role="admin">
cuando lo ve en las herramientas de desarrollador.
- Luego escucha el
onClick
evento declarado con @HostListener
, adjunto al elemento host del componente, cambiando role
con cada clic.
- El cambio cuando el
<p myDir>
se hace clic es que su etiqueta de apertura cambia de <p mydir="" role="admin">
a <p mydir="" role="guest">
ida y vuelta.
directivas.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 {}