angular - 如何将点击事件绑定(bind)到整个组件(又名 :host)?

标签 angular

我有一个容器组件 ContainerComponent,其中包含一些子组件 ChildComponent,使用 *ngFor 生成。

ContainerComponent 模板:

<div class="child" *ngFor="let child of children">
    <child [child]="child"></child>
</div>

ChildComponent 模板:

<h2>{{child.name}}</h2>
<h2>{{child.data}}</h2>

对于 ChildComponent,我定义了一个样式表,我可以在其中使用 :host 访问整个组件主体,如 here 所述.

有了这个,我为 ChildComponent 创建了样式:

:host
{
    display: block;

    width: 400px;
    height: 300px;
}

现在,我想在每个 ChildComponent(整个组件)上绑定(bind) (click) 事件,并在 ChildComponent 类中捕获它。为此,我必须在 something 上设置 (click)="method" 属性。

但是,在谈论事件时,我没有类似 :host 的东西。

我不想在 ContainerComponent 中绑定(bind)。

一个可能的解决方案是将整个组件包装在 div 中并将事件绑定(bind)到此 div,但我正在寻找一种更优雅的方式。

最佳答案

选项 1:

在组件元数据中指定主机中的点击处理程序

host: {
   "(click)": "onClick($event)"
}

在组件中实现点击处理程序

onClick(e) {
   console.log(e)
}

选项 2:

使用 HostListener 为组件添加监听器。

import {Component, HostListener} from "@angular/core";

...
enter code here
...

@HostListener('click', ['$event'])
onClick(e) {
   console.log(e);
}

关于angular - 如何将点击事件绑定(bind)到整个组件(又名 :host)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40621879/

相关文章:

javascript - 从 AngularJS 开始还是从 Angular 2 开始?

javascript - 如何从服务( native 脚本/firebase)中使用 Promise?

angular - 我如何将 fromEvent (Angular rxjs) 与多个元素一起使用?

javascript - Electron 应用程序和基于 Web 的 Angular 应用程序

angular - 如何正确使用OnDestroy

Angular 6 和 Socket.IO - Socket.On 不起作用

angular - 在 socket.io-client 中调用 IO 时出错, Angular 为 8

angular - Angular 2 中的 $templateCache?

javascript - 为什么我在使用 ngrx 进行延迟加载的 Angular 6 应用程序的单元测试中收到 "No provider for ReducerManager!"错误?

javascript - 在 Angular 8 中导入 interactjs 1.7.2 不起作用