2016-05-06 7 views
2

角度2のアプリでは、シフトキーを押しているときにクリックイベントが異なるようにします。これを達成する方法は?角度2:要素がクリックされたときにシフトキーが押されていないか確認します

HTMLは以下の通りです:

<div class="item" *ngFor="#obj of available" (click)="toggleSelected(obj)"></div> 

と私はこのような何かをしたい:

toggleSelected(obj) { 
    if(shift is pressed) { 
     do this 
    } else { 
     do that 
    } 
    } 

ので、Shiftキーが押された場合、私は検出することができますか?ありがとう!

答えて

8

toggleSelected方法に$eventオブジェクトを渡す:

<div class="item" *ngFor="#obj of available" (click)="toggleSelected(obj, $event)"></div> 

toggleSelected方法では、イベントのshiftKeyプロパティがtrueあるかどうかを確認します。

toggleSelected(obj, event) { 
    if(event.shiftKey) { 
    do this 
    } else { 
    do that 
    } 
} 
+0

どこで '$イベント 'を取りますか?それは未定義と言います。 – totoro

+0

@dragon_cat: '(click)'バインディングで '$ event'を2番目の引数として渡し、' toggleSelected'にパラメータとして 'event'を追加することを確認してください。 –

+0

素晴らしい答え。完全性のためだけに、パラメータのタイプについても言及した回答を追加しました。コーディングを使用する場合(ビジュアルスタジオコードなど)に便利です。 – bvdb

0

使用keypress(click)結合に

<div class="item" *ngFor="#obj of available" (keypress)="eventHandler($event)"></div> 

eventHandler(event) { 
    console.log(event, event.keyCode, event.keyIdentifier); 
} 
0

あなたの質問は、テーブルのレコードの複数選択オプションを参照することがあります。

この場合、選択したオブジェクトをセットに格納できます。

public selectedRowSet: Set<MyObject> = new Set();  

レコードが選択されるたびに、次の方法を使用してセットに追加します。

public setSelectedRow(obj: MyObject, event: MouseEvent) { 
    if(!event.shiftKey) { 
    selectedRowSet.clear(); 
    } 
    selectedRowSet.add(obj); 
} 

次に、条件付き書式を追加することをお勧めします。あなたのビューの使用では

public isRowSelected(obj: MyObject): boolean 
{ 
    return selectedRowSet.has(obj); 
} 

:ここ

<tr *ngFor="let obj of myObjectCollection" 
    [class.someCssClass]="isRowSelected(obj)" 
    (click)="setSelectedRow(obj, $event);"> 
... 
</tr> 

REVIEW

は有用であるかもしれないいくつかの追加の調整、以下のとおりです。

  • あなたが使用することを選択することができますシフトまたはCtrl
  • このキーを押すと、レコードを選択解除することもできます。

私はこれが誰かにとって便利だと願っています。

public setSelectedRow(bo: Bo, event: MouseEvent) { 
    // support shift and control. 
    const add = event.shiftKey || event.ctrlKey; 
    if (!add) { 
    this.selectedRowSet.clear(); 
    this.selectedRowSet.add(bo); 
    return; 
    } 

    // toggle selected record 
    if (this.selectedRowSet.has(bo)) { 
    this.selectedRowSet.delete(bo); 
    } 
    else { 
    this.selectedRowSet.add(bo); 
    } 
} 
関連する問題