2016-09-17 2 views
0

У меня есть элемент div, завернутый тегом метки. Ярлык имеет элемент флажка. Когда я получаю значение события клика из моей директивы (с помощью hostListener), моя директива называется два раза по одному на div внутри метки и другая для флажка. Как я могу назвать свою директиву ровно один раз.Запретить прослушивание хоста два раза на 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> 

Производительность при нажмите на DIV с домашней директивы: -

enter image description here

ответ

0

Проблема заключается в том, когда вы нажимаете на " Test data ", это инициирует событие click для кликов. Этот текст является частью метки. Когда вы нажимаете на метку, элемент, указанный в теге «для», будет нажат (второй щелчок директивы).

Для предотвращения двойного стрельбы вам необходимо переместить текст из div.

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

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

+0

Ok! Это работает сейчас. Но у меня есть карта, которая откидывается назад, нажимая на нее и снова отбрасывая ее. Все данные моей карты (с изображением и значками) находятся внутри div, а моя директива (применяется к этому div) переворачивает карту, добавляя на нее класс flip. Ваше решение влияет на мой образ и значок css? –

+0

1. Просьба описать поведение, которое вы ожидаете. 2. Предоставьте весь код. Как я могу сказать, что это изменение влияет на что-то без этого? Изменение места текста не должно влиять на изображения. Но для перемещенного класса может применяться другой стиль, зависит от css. – Alexandr