2017-12-20 13 views
1

クラス「foo」を持つ要素のclickイベントをリッスンする適切な方法は何ですか?Angular 2の特定のクラスを持つ要素にイベントをバインドする方法はありますか?

私は、このバージョンは少し壊れやすいと思い
<div> 
    <p class="foo">Hi</p> 
    <span class="foo">Hello</span> 
    <p class="bar">Hey</p> 
<div> 
<div class="foo"> 
    <img src="..."/> 
</div> 

<div> 
    <p class="foo" (click)="bar()">Hi</p> 
    <span class="foo" (click)="bar()">Hello</span> 
    <p class="bar">Hey</p> 
<div> 
<div class="foo" (click)="bar()"> 
    <img src="..."/> 
</div> 

答えて

2

これはテンプレートのテンプレートまたは一部である場合:

<div> 
    <p class="foo">Hi</p> 
    <span class="foo">Hello</span> 
    <p class="bar">Hey</p> 
<div> 
<div class="foo"> 
    <img src="..."/> 
</div> 

あなたはそれとバインドのための@Directive()を作成することができますイベントはhostプロパティへ:

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

@Directive({ 
    selector : '.bar', // <---selects only .bar elements 
    host:{ 
     "(click)":"bar()" 
    } 
}) 

export class BarDirective{ 

    bar(){ 
     console.log('clicked'); 
    } 

} 

@HostListener()のような他のデコレータもありますが、それは@angular/coreからインポートし、代わりにクラスブロック内のイベントをバインドする必要があります。

+0

ありがとうございました! このイベントを独自のcomponent.tsで処理することは可能ですか?それはいくつかの変数を修正するでしょう。あるいは、新しいディレクティブとコンポーネントの間の通信のためのサービスを実装する必要がありますか? – Ryax33

関連する問題