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()
方法的作用
让我们看一下下面的方法:
我们可以注意到,在触发nativeelement.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()
方法的作用
让我们看一下下面的方法:
我们可以注意到,在触发nativeelement.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();