【发布时间】:2020-07-30 02:22:20
【问题描述】:
我想绑定箭头键的事件以跳转到 MatTable 中的另一个输入。
我想做类似以下情况的事情:
我的组件.html
<table mat-table [dataSource]="dataSource">
<ng-container matColumnDef="name">
<th th mat-header-cell *matHeaderCellDef>Name</th>
<td mat-cell *matCellDef="let element">
<input type="text" (keyup.arrowup)="jumpToPreviousNameInput()" (keyup.arrowdown)="jumpToNextNameInput()" (keyup.arrowright)="jumpToAgeInput()"/>
</td>
</ng-container>
<ng-container matColumnDef="age">
<th mat-header-cell *matHeaderCellDef>Age</th>
<td mat-cell *matCellDef="let element">
<input type="number" min="0" (keyup.arrowup)="jumpToPreviousAgeInput()" (keyup.arrowdown)="jumpToNextAgeInput()" (keyup.arrowleft)="jumpToNameInput()" />
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns; let element" class="table-row" </tr>
</table>
Angular 9 可以做到这一点吗?
我不知道如何在 Angular 中获取下一个输入元素。在 Vanilla JS 中,我会执行以下操作:
let myTable = document.querySelector('table')
let inputs = myTable.querySelectorAll('input')
inputs.forEach((input, index) => {
input.addEventListener('keydown', e => {
const key = e.key;
switch(key) {
case "ArrowLeft":
try { inputs[index-1].focus() } catch {}
break;
case "ArrowRight":
try { inputs[index + 1].focus() } catch { }
break;
case "ArrowUp":
try { inputs[index - 2].focus() } catch { }
break;
case "ArrowDown":
try { inputs[index + 2].focus() } catch { }
break;
}
})
})
【问题讨论】:
-
有点老了,不过我觉得可以帮到你:stackoverflow.com/questions/56562871/…
标签: angular angular-material mat-table