在我环游世界互联网的过程中,尤其是现在的angular.io 风格的文档中,我发现了很多对@HostBinding和的引用@HostListener。看起来它们非常基础,但不幸的是,目前它们的文档有点粗略。
@HostBinding
@HostListener
谁能解释一下它们是什么,它们是如何工作的并举例说明它们的用法?
你检查过这些官方文档吗?
HostListener - 声明一个主机监听器。当宿主元素发出指定的事件时,Angular 将调用装饰方法。
@HostListener - 将监听由 . 声明的宿主元素发出的事件@HostListener。
HostBinding - 声明一个主机属性绑定。Angular 在更改检测期间自动检查主机属性绑定。如果绑定更改,它将更新指令的宿主元素。
@HostBinding - 将属性绑定到宿主元素,如果绑定发生变化,HostBinding将更新宿主元素。
HostBinding
注意: 这两个链接最近都被删除了。在链接返回之前,样式指南的“ HostBinding- HostListening ”部分可能是一个有用的替代方案。
这是一个简单的代码示例,可以帮助您了解这意味着什么:
演示:这是 plunker 中的演示 - “关于 @HostListener 和 @HostBinding 的简单示例”
role
attr.role
<p myDir>``<p mydir="" role="admin">
onClick
<p myDir>
<p mydir="" role="admin">
<p mydir="" role="guest">
指令.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'; } }
应用组件.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 {}