【问题标题】:Prevent host listener to call two times on div inside label防止主机监听器在标签内的 div 上调用两次
【发布时间】:2017-01-25 13:26:53
【问题描述】:

我有一个用标签标签包裹的 div 元素。标签标签具有复选框元素。当我从我的指令(通过 hostListener)获得点击事件值时,我的 指令在标签内的 div 上调用了两次,在复选框中调用了另一个。我怎样才能准确地调用我的指令一次。

我的指令

import { Directive, HostListener } from '@angular/core';

@Directive({
 selector: '[home]'
})
export class HomeDirective {
 @HostListener('click', ['$event.target']) onclick(data: any) {
    console.log(data);
 }
}

我的html,

<div>
 <label for="test">
  <div home>test dataa
   <input type="checkbox" id="test" />
  </div>
 </label>
</div>

使用 home 指令点击 div 时的输出:-

enter image description here

【问题讨论】:

    标签: html angular2-directives


    【解决方案1】:

    问题是当你点击“测试数据”时,这会触发指令点击事件(第一个指令点击)。此文本是标签的一部分。当您单击标签时,将单击“for”标签中指定的项目(第二次指令单击)。

    为了防止双重触发,您应该从 div 中移动文本。

    <div>
     <label for="test">
       test dataa
       <div home>
       <input type="checkbox" id="test" />
      </div>
     </label>
    </div>
    

    http://plnkr.co/edit/TyxkmhLlvKszXYarXXvr?p=preview

    【讨论】:

    • 好的!那是现在的工作。但是我有卡片,点击它会翻转回来,然后再次点击它。我所有卡片的数据(具有图像和图标)都在 div 内,我的指令(应用于该 div)通过在卡片上添加翻转类来翻转卡片。你的解决方案会影响我的图片和图标的 CSS 吗?
    • 1.请描述您期望的行为。 2. 提供所有代码。如果没有这个,我怎么能说这种变化会影响某些东西?文字位置的变化不应影响图像。但是移动类可以应用不同的样式,取决于 css。
    猜你喜欢
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 2013-10-15
    • 2014-12-13
    • 2016-07-20
    相关资源
    最近更新 更多