Avez-vous vérifié ces documents officiels ?
HostListener - Déclare un auditeur d'hôte. Angular invoquera 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 qui est déclaré avec l'option @HostListener
.
Liaison avec l'hôte - Déclare une liaison de propriété d'hôte. Angular vérifie automatiquement les liaisons de propriétés d'hôte lors de la détection des changements. Si une liaison est modifiée, l'élément hôte de la directive est mis à jour.
@HostBinding
- liera la propriété à l'élément hôte, si une liaison est modifiée, HostBinding
mettra à jour l'élément hôte.
NOTE : Les deux liens ont été supprimés récemment. Le " Liaison hôte-écoute hôte La partie " " du guide de style peut être une alternative utile jusqu'à ce que les liens reviennent.
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 un
role
propriété -- déclarée avec @HostBinding
-- à l'élément de l'hôte
- Rappelons que
role
est un attribut, puisque nous utilisons l'option attr.role
.
-
<p myDir>
devient <p mydir="" role="admin">
lorsque vous le visualisez dans les outils de développement.
- Il écoute ensuite les
onClick
événement déclaré avec @HostListener
attachée à l'élément hôte du composant, qui change role
à chaque clic.
- Le changement lorsque le
<p myDir>
est cliqué est que sa balise d'ouverture change de <p mydir="" role="admin">
a <p mydir="" role="guest">
et 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 {}