Bạn đã kiểm tra các tài liệu chính thức?
HostListener - Khai báo một trình nghe máy chủ. Angular sẽ gọi phương thức được trang trí khi phần tử máy chủ phát ra sự kiện đã chỉ định.
@HostListener
- sẽ lắng nghe sự kiện được phát ra bởi phần tử máy chủ được khai báo với @HostListener
.
HostBinding - Khai báo ràng buộc thuộc tính máy chủ. Angular tự động kiểm tra các ràng buộc thuộc tính máy chủ trong quá trình phát hiện thay đổi. Nếu một ràng buộc thay đổi, nó sẽ cập nhật phần tử máy chủ của lệnh.
@HostBinding
- sẽ liên kết thuộc tính với phần tử máy chủ, Nếu một ràng buộc thay đổi, HostBinding
sẽ cập nhật phần tử máy chủ.
LƯU Ý: Cả hai liên kết đã được gỡ bỏ gần đây. Phần " HostBinding-HostListening " của hướng dẫn kiểu có thể là một sự thay thế hữu ích cho đến khi các liên kết trở lại.
Đây là một ví dụ mã đơn giản để giúp hình dung điều này có nghĩa là gì:
DEMO: Đây là bản demo trực tiếp trong plunker - "Một ví dụ đơn giản về @hostListener & @hostBinding"
- Ví dụ này liên kết một thuộc
role
tính - được khai báo với@HostBinding
- với phần tử của máy chủ
- Hãy nhớ lại đó
role
là một thuộc tính, vì chúng tôi đang sử dụngattr.role
.
<p myDir>
trở thành <p mydir="" role="admin">
khi bạn xem nó trong các công cụ phát triển.
- Sau đó, nó lắng nghe
onClick
sự kiện được khai báo cùng với @HostListener
phần tử máy chủ của thành phần, thay đổirole
theo từng nhấp chuột.
- Thay đổi khi
<p myDir>
được nhấp là thẻ mở của nó thay đổi từ <p mydir="" role="admin">
đến <p mydir="" role="guest">
và quay lại.
chỉ thị
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 {}