Angular 角度笑话观众-焦点功能不起作用

Angular 角度笑话观众-焦点功能不起作用,angular,jestjs,spectator,Angular,Jestjs,Spectator,我有一个角度分量,看起来像这样 <div class="hello" (keydown.enter)="doSomething()"></div> 也 而且两者都有 spectator.detectChanges(); // without success 我想,这个问题存在于我的HTML模板中,但这些函数不适用于: <div class="hello" tabindex="0"> 即使 <input class="hello" type="t

我有一个角度分量,看起来像这样

<div class="hello" (keydown.enter)="doSomething()"></div>

而且两者都有

spectator.detectChanges(); // without success
我想,这个问题存在于我的HTML模板中,但这些函数不适用于:

<div class="hello" tabindex="0">

即使

<input class="hello" type="text">


请提供一些支持,了解如何关注div元素,然后按enter键。

首先,您需要了解
旁观者.focus()
方法的作用

让我们看一下下面的方法:

我们可以注意到,在触发native
element.focus()方法之前,它还调用
patchElementFocus(element)以下是此方法的示例:

export function patchElementFocus(element: HTMLElement): void {
  element.focus = () => dispatchFakeEvent(element, 'focus');
  element.blur = () => dispatchFakeEvent(element, 'blur');
}
其中
dispatchFakeEvent
调用
node.dispatchEvent(事件)引擎盖下的本机方法

因此,
cobservator.focus(element)
触发
node.dispatchEvent(…)

现在,您需要了解受信任事件和不受信任事件之间的区别

使用node.dispatchEvent触发的事件称为不受信任的事件,它们不会触发默认浏览器操作。()

这意味着手动触发事件不会生成与该事件关联的默认操作。例如,手动触发焦点事件不会导致元素接收焦点,手动触发提交事件不会提交表单

您只能通过事件处理程序侦听手动创建的事件。 这就是《旁观者》向我们展示的。(测试)(听者)

最后,这里的解决方案是使用本机
element.focus()
方法来设置div的焦点。此外,这里还需要
tabindex属性

spectator.query<HTMLDivElement>('.hello').focus();
expect(spectator.query('.hello')).toBeFocused();
旁观者查询('.hello').focus();
expect(conspector.query('.hello')).toBeFocused();

首先,您需要了解
旁观者.focus()
方法的作用

让我们看一下下面的方法:

我们可以注意到,在触发native
element.focus()方法之前,它还调用
patchElementFocus(element)以下是此方法的示例:

export function patchElementFocus(element: HTMLElement): void {
  element.focus = () => dispatchFakeEvent(element, 'focus');
  element.blur = () => dispatchFakeEvent(element, 'blur');
}
其中
dispatchFakeEvent
调用
node.dispatchEvent(事件)引擎盖下的本机方法

因此,
cobservator.focus(element)
触发
node.dispatchEvent(…)

现在,您需要了解受信任事件和不受信任事件之间的区别

使用node.dispatchEvent触发的事件称为不受信任的事件,它们不会触发默认浏览器操作。()

这意味着手动触发事件不会生成与该事件关联的默认操作。例如,手动触发焦点事件不会导致元素接收焦点,手动触发提交事件不会提交表单

您只能通过事件处理程序侦听手动创建的事件。 这就是《旁观者》向我们展示的。(测试)(听者)

最后,这里的解决方案是使用本机
element.focus()
方法来设置div的焦点。此外,这里还需要
tabindex属性

spectator.query<HTMLDivElement>('.hello').focus();
expect(spectator.query('.hello')).toBeFocused();
旁观者查询('.hello').focus();
expect(conspector.query('.hello')).toBeFocused();

谢谢你非常详细的回答谢谢你非常详细的回答
spectator.query<HTMLDivElement>('.hello').focus();
expect(spectator.query('.hello')).toBeFocused();