Avez-vous vérifié ces documents officiels?
HostListener - Déclare un écouteur hôte. Angular appellera la méthode décorée lorsque l'élément hôte émettra l'événement spécifié.
@HostListener
- écoutera l'événement émis par l'élément hôte déclaré avec @HostListener
.
HostBinding - Déclare une liaison de propriété d'hôte. Angular vérifie automatiquement les liaisons des propriétés de l'hôte lors de la détection des modifications. Si une liaison change, elle mettra à jour l'élément hôte de la directive.
@HostBinding
- liera la propriété à l'élément hôte, si une liaison change, HostBinding
mettra à jour l'élément hôte.
REMARQUE: les deux liens ont été supprimés récemment. La partie " HostBinding-HostListening " du guide de style peut être une alternative utile jusqu'au retour des liens.
Voici un exemple de code simple pour vous aider à comprendre ce que cela signifie:
DEMO: Voici la démo en direct dans plunker - "Un exemple simple sur @HostListener & @HostBinding"
- Cet exemple lie une
role
propriété - déclarée avec @HostBinding
- à l'élément de l'hôte
- Rappelez-vous que
role
c'est un attribut, puisque nous utilisons attr.role
.
<p myDir>
devient <p mydir="" role="admin">
lorsque vous l'affichez dans les outils de développement.
- Il écoute ensuite l'
onClick
événement déclaré avec @HostListener
, attaché à l'élément hôte du composant, changeant role
à chaque clic.
- Le changement lorsque l'utilisateur
<p myDir>
clique sur est que sa balise d'ouverture change de <p mydir="" role="admin">
à <p mydir="" role="guest">
et de retour.
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 {}