Você verificou esses documentos oficiais?
HostListener - Declara um ouvinte de host. Angular invocará o método decorado quando o elemento host emitir o evento especificado.
@HostListener
- escutará o evento emitido pelo elemento host declarado com @HostListener
.
HostBinding - Declara uma ligação de propriedade do host. O Angular verifica automaticamente as ligações das propriedades do host durante a detecção de alterações. Se uma ligação mudar, ele atualizará o elemento host da diretiva.
@HostBinding
- vinculará a propriedade ao elemento host. Se uma ligação mudar, HostBinding
atualizará o elemento host.
NOTA: Ambos os links foram removidos recentemente. A parte " HostBinding-HostListening " do guia de estilo pode ser uma alternativa útil até o retorno dos links.
Aqui está um exemplo de código simples para ajudar a imaginar o que isso significa:
DEMO: Aqui está a demonstração ao vivo no plunker - "Um exemplo simples sobre @HostListener e @HostBinding"
- Este exemplo liga uma
role
propriedade - declarada com @HostBinding
- ao elemento do host
- Lembre-se de que
role
é um atributo, pois estamos usando attr.role
.
<p myDir>
torna-se <p mydir="" role="admin">
quando você o visualiza nas ferramentas do desenvolvedor.
- Ele escuta o
onClick
evento declarado com @HostListener
, anexado ao elemento host do componente, mudando role
a cada clique.
- A alteração quando o
<p myDir>
botão é clicado é que sua tag de abertura muda de um lado <p mydir="" role="admin">
para o outro <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 {}