过滤数组时输入失去焦点,使用 *ngFor 和 Clarity 的 Angular 组件呈现
Input loses focus when filtering an array, rendered using *ngFor and Clarity's Angular components
我有一个使用 *ngFor 呈现的用户列表。用户可以选择通过在输入字段中键入名称来过滤列表。
但是,当用户开始键入以进行过滤时,一旦列表开始向下过滤,输入字段就会失去焦点。在 Whosebug 上关注几个不同的帖子(*ngFor
中的 , , 3), I have used trackBy function 允许 Angular 唯一标识项目并根据需要执行 DOM 更新。
Angular 文档描述了 trackBy
函数对于“保留任何 DOM-特定的 UI 状态(如光标位置、焦点,文本选择)当可迭代对象被修改时”。但在我的例子中,当数组被修改时,这种 UI 的焦点状态就会丢失。
Here is a link to a reproducible scenario in stackblitz. 那里也描述了问题描述和重现步骤。
trackBy
完全没问题,而问题是 clrDropdownItem
指令应用于 <li>
,这不是必需的。
一旦更新列表,该指令就会自动获得第一个元素的焦点。
我刚刚删除了它,现在您的代码可以正常工作了。
这是一个 link 的工作代码 - https://stackblitz.com/edit/clarity-dark-theme-v5-cat3jm?devtoolsheight=33&file=src%2Fapp%2Fapp.component.html
我有一个使用 *ngFor 呈现的用户列表。用户可以选择通过在输入字段中键入名称来过滤列表。
但是,当用户开始键入以进行过滤时,一旦列表开始向下过滤,输入字段就会失去焦点。在 Whosebug 上关注几个不同的帖子(*ngFor
中的
Angular 文档描述了 trackBy
函数对于“保留任何 DOM-特定的 UI 状态(如光标位置、焦点,文本选择)当可迭代对象被修改时”。但在我的例子中,当数组被修改时,这种 UI 的焦点状态就会丢失。
Here is a link to a reproducible scenario in stackblitz. 那里也描述了问题描述和重现步骤。
trackBy
完全没问题,而问题是 clrDropdownItem
指令应用于 <li>
,这不是必需的。
一旦更新列表,该指令就会自动获得第一个元素的焦点。
我刚刚删除了它,现在您的代码可以正常工作了。
这是一个 link 的工作代码 - https://stackblitz.com/edit/clarity-dark-theme-v5-cat3jm?devtoolsheight=33&file=src%2Fapp%2Fapp.component.html