Sprawdziłeś te oficjalne dokumenty?
HostListener - deklaruje odbiornik hosta. Angular wywoła dekorowaną metodę, gdy element hosta wyemituje określone zdarzenie.
@HostListener
- nasłuchuje zdarzenia emitowanego przez element hosta zadeklarowany za pomocą @HostListener
.
HostBinding - deklaruje powiązanie właściwości hosta. Angular automatycznie sprawdza powiązania właściwości hosta podczas wykrywania zmian. Jeśli powiązanie ulegnie zmianie, zaktualizuje element hosta dyrektywy.
@HostBinding
- powiąże właściwość z elementem hosta, jeśli powiązanie ulegnie zmianie, HostBinding
zaktualizuje element hosta.
UWAGA: Oba łącza zostały niedawno usunięte. Część przewodnika stylów „ HostBinding-HostListening ” może być użyteczną alternatywą do czasu powrotu linków.
Oto prosty przykład kodu, który pomaga zobrazować, co to oznacza:
DEMO: Oto demo na żywo w plunkerze - „Prosty przykład o @HostListener i @HostBinding”
- Ten przykład wiąże
role
właściwość - zadeklarowaną za pomocą @HostBinding
- z elementem hosta
- Przypomnij sobie, że
role
jest to atrybut, ponieważ używamy attr.role
.
<p myDir>
staje się, <p mydir="" role="admin">
gdy przeglądasz go w narzędziach programistycznych.
- Następnie nasłuchuje
onClick
zdarzenia zadeklarowanego za pomocą @HostListener
, dołączonego do elementu hosta komponentu, zmieniającego role
się po każdym kliknięciu.
- Zmiana po
<p myDir>
kliknięciu polega na tym, że jego otwierający znacznik zmienia się z <p mydir="" role="admin">
na <p mydir="" role="guest">
iz powrotem.
dyrektywy.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 {}