我有一堆动态创建的输入字段
<tr *ngFor="let row of rows; let rowIdx = index">
<td *ngFor="let col of columns; let colIdx = index">
<mat-form-field class="example-full-width">
<input #inputs #test type="text" placeholder="Pick one" aria-label="Number" matInput [formControl]="myControl" [matAutocomplete]="auto"
(keyup.enter)="shiftFocusEnter(rowIdx, colIdx)">
<mat-autocomplete #auto="matAutocomplete">
<mat-option *ngFor="let option of filteredOptions | async" [value]="option">
{{ option }}
</mat-option>
</mat-autocomplete>
</mat-form-field>
</td>
</tr>
我想访问我的课程中的这些输入字段。
我目前正在使用
@ViewChild('test', { read: MatAutocompleteTrigger }) test: MatAutocompleteTrigger;
来访问它。
然而,这只会给我通过循环创建的所有输入字段的第一个输入字段。
使用 ViewChildren 只会在调用“测试”对象的实习生函数时导致错误
e.g.
this.test.closePanel() => “this.test.closePanel 不是一个函数”
Edit1:
为了提供更多信息,我有一个动态创建的表(行和列)。
我的表格当前充满了多个输入字段。我可以通过按 Enter 键来浏览这些输入字段。
但是,如果我按 Enter 键进行 Tab,角度自动完成材料的建议面板将不会关闭。这就是为什么我尝试手动调用 closePanel() 方法,但是通过使用上述方法,只有第一个单元格被“识别”,因此 closePanel() 方法仅适用于第一个单元格 - 输入元素
EDIT 2:
几周前我设法解决了这个问题,但忘记更新以防有人也遇到这个问题。
这就是我的方法现在的样子:
shiftFocusEnter(rowIdx: number, colIdx: number) {
console.log("Enter", rowIdx, colIdx);
if(colIdx == 4 && rowIdx == 5) {
console.log("Reached end of row");
}
else {
colIdx = colIdx + this.columns.findIndex(c => c.editable);
this.focusInput(rowIdx, colIdx);
this.autocompletes.toArray().forEach(el => {
el.closePanel();
})
}
}
focusInput(rowIdx: number, colIdx: number) {
console.log("FOCUS ON", rowIdx, colIdx);
let inputEls = this.inputs.toArray();
let flatIdx = (rowIdx * this.columns.length) + colIdx;
inputEls[flatIdx].nativeElement.focus();
}