Haben Sie diese offiziellen Dokumente überprüft?
HostListener - Deklariert einen Host-Listener. Angular ruft die dekorierte Methode auf, wenn das Host-Element das angegebene Ereignis ausgibt.
@HostListener
- hört das Ereignis ab, das von dem Host-Element ausgegeben wird, mit dem deklariert wurde @HostListener
.
HostBinding - Deklariert eine Bindung der Host-Eigenschaft. Angular überprüft die Host-Eigenschaftsbindungen während der Änderungserkennung automatisch. Wenn sich eine Bindung ändert, wird das Host-Element der Direktive aktualisiert.
@HostBinding
- bindet die Eigenschaft an das Host-Element. Wenn sich eine Bindung ändert, HostBinding
wird das Host-Element aktualisiert.
HINWEIS: Beide Links wurden kürzlich entfernt. Der Abschnitt " HostBinding-HostListening " des Styleguides kann eine nützliche Alternative sein, bis die Links zurückkehren.
Hier ist ein einfaches Codebeispiel, um sich ein Bild davon zu machen, was dies bedeutet:
DEMO: Hier ist die Demo live im Plunker - "Ein einfaches Beispiel für @HostListener & @HostBinding"
- In diesem Beispiel wird eine
role
mit deklarierte Eigenschaft @HostBinding
an das Element des Hosts gebunden
- Denken Sie daran, dass dies
role
ein Attribut ist, da wir es verwenden attr.role
.
<p myDir>
wird, <p mydir="" role="admin">
wenn Sie es in Entwicklertools anzeigen.
- Anschließend wird das
onClick
mit dem @HostListener
Hostelement der Komponente angehängte Ereignis abgehört, das role
mit jedem Klick geändert wird.
- Die Änderung beim
<p myDir>
Klicken auf besteht darin, dass sich das öffnende Tag von <p mydir="" role="admin">
nach <p mydir="" role="guest">
und zurück ändert .
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 {}