在Angular 2应用程序中,我希望点击事件在按住Shift键时触发不同的内容。如何实现这个目标?
html如下:
<div class="item" *ngFor="#obj of available" (click)="toggleSelected(obj)"></div>
我想做这样的事情:
toggleSelected(obj) {
if(shift is pressed) {
do this
} else {
do that
}
}
那么如何检测是否按下了shift键?谢谢!
答案 0 :(得分:24)
在Show()
绑定中,将(click)
对象传递给$event
方法:
toggleSelected
在<div class="item" *ngFor="#obj of available" (click)="toggleSelected(obj, $event)"></div>
方法中,检查事件的toggleSelected
属性是否为shiftKey
:
true
答案 1 :(得分:5)
您的问题可能涉及表格记录的多选选项。
在这种情况下,您可以将所选对象存储在一个集合中。
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>
以下是一些额外的调整,可能很有用:
我希望这对某些人有用。
public setSelectedRow(bo: Bo, event: MouseEvent) {
// support shift, control and the command key.
const add = event.shiftKey || event.ctrlKey || event.metaKey;
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);
}
}
答案 2 :(得分:0)
实际答案是keyboard事件是内置的。
[2, 3, 5, 7, 11, 13, 17, 19, 23, ........ ]
例如,将焦点放在一个字段内,按住Shift键,然后再按下另一个键。
键盘事件包含<input (keydown)="onKey($event)"` ...
答案 3 :(得分:-1)
使用keypress
<div class="item" *ngFor="#obj of available" (keypress)="eventHandler($event)"></div>
eventHandler(event) {
console.log(event, event.keyCode, event.keyIdentifier);
}