为啥单击功能会在 Angular 2 中为自定义组件触发两次

Posted

技术标签:

【中文标题】为啥单击功能会在 Angular 2 中为自定义组件触发两次【英文标题】:Why click function triggers twice for custom component in Angular 2为什么单击功能会在 Angular 2 中为自定义组件触发两次 【发布时间】:2017-06-26 00:04:20 【问题描述】:

我的自定义组件click函数被触发了两次——自定义组件的事件和样本级事件都被触发了。

这是我的 Plunker:

https://plnkr.co/edit/wp2iWh7OStdPm5uXsWbP?p=preview

【问题讨论】:

【参考方案1】:

我相信:添加发射也可以解决它

模板

<div (click)="divClick($event)">Custom Div Clcik here!</div>

@Output()
divClick = new EventEmitter<any>().emit;

【讨论】:

【参考方案2】:

试试:

event.preventDefault();

代替:

event.stopPropagation();

【讨论】:

【参考方案3】:

您的问题是您在父组件和子组件中调用 click() 事件: 这里:

<cus-div (click)="onClick()"></cus-div>

这里:

<div (click)="divClick()">Custom Div Clcik here!</div>

删除你的点击事件&lt;cus-div&gt;&lt;/cus-div&gt;上的点击事件,它会触发一次

【讨论】:

【参考方案4】:

因为你在子组件和父组件上绑定了两次。 mouseEvent 默认从子组件传播到父组件。您可以停止将事件传播到父组件。

模板:

<div (click)="divClick($event)">Custom Div Clcik here!</div>

类:

divClick(event) 
    event.stopPropagation();
    alert("divClick");

【讨论】:

以上是关于为啥单击功能会在 Angular 2 中为自定义组件触发两次的主要内容,如果未能解决你的问题,请参考以下文章

如何在Angular2,agm-marker中为自定义标记图标添加边框?

如何在 Sails.js 中为自定义路由启用 CORS

如何在 Delphi Form Designer 中为自定义组件添加上下文菜单操作?

为啥我的安卓手机在为自定义滚动视图添加标签栏视图后没有功能

在 UITableViewCell 中为自定义 UIButton 设置动画

在快速静态错误中为自定义 UIView 设置动画