Angular Material:当用户按下回车键时隐藏自动完成面板
Angular Material:当用户按下回车键时隐藏自动完成面板
我正在做一个表格,用户可以通过按下回车键来在可编辑的元素之间切换。我还在其中使用了Angular Material。
我有一个带有多个动态创建的输入字段和mat-autocomplete元素的mat-form-field。但是在这种情况下,我的回车键事件会有些不同。
当您点击输入字段时,会打开一个面板(下拉菜单),用户可以选择输入,或者可以自己输入,面板会提供建议(自动完成)。
如果按下Tab键会发生什么?
如果您在输入时按下Tab键,光标将移到下一个可编辑的元素,并关闭最新元素的面板(下拉菜单)。
如果按下回车键会发生什么?
如果您在输入时按下回车键,光标将移到下一个可编辑的元素,但是最新元素的面板(下拉菜单)将保持打开状态,这导致多个输入字段都有一个打开的下拉菜单面板,即使用户已经输入了所需内容。
模板:
{{ option }}
这只是根据数组中的对象数量创建行(在这里并不重要)。
输入字段还有一个keyup.enter事件,当用户在焦点在输入字段上时按下回车键时触发,将行索引和列索引传递给获取下一个可编辑元素的函数。
组件:
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.autocomplete.showPanel = false; this.focusInput(rowIdx, colIdx); }
}
这个函数接收两个参数,行索引和列索引,并计算下一个可编辑元素的索引以便聚焦。
this.autocomplete.showPanel = false 这行代码是为了看看能否通过这种方式简单地关闭面板,但是它没有起作用。
this.autocomplete 是一个MatAutocomplete类的对象。我通过以下方式添加了它:
@Input('matAutocomplete') autocomplete: MatAutocomplete
我需要什么:
我希望在按下回车键后,mat-autocomplete元素的下拉菜单面板关闭。
提前感谢!
更新:
所以在工作一段时间后,我找到了这个
@ViewChild('test', { read: MatAutocompleteTrigger }) test: MatAutocompleteTrigger;
+
this.test.closePanel();
这次我能够关闭表格中第一个单元格的面板,但是其他输入字段的面板仍然保持打开状态。