如何手动触发事件并进行变更检测?
How to manually trigger an event and have change detection occur?
当我拖动组件的根元素时,假设组件中存在拖动侦听器,例如:
@HostListener('drag', ['event'])
onDrag(e) { ... }
每次事件发生时,变化检测也会发生,因为事件是异步操作。
但是,当手动触发拖动事件时,我似乎无法进行变化检测。
let event = new Event('drag');
fixture.nativeElement.dispatchEvent(event);
这将调用拖动侦听器,但不会触发变化检测。
需要说明的是,我知道我可以手动触发事件,然后也可以手动调用 detectChanges()
,但我希望事件能够像现实生活中那样触发变化检测。
我错了,fixture.nativeElement.dispatchEvent(event);
确实会触发更改检测。这在监视 component.ngZone.run
.
时很容易看出
当我拖动组件的根元素时,假设组件中存在拖动侦听器,例如:
@HostListener('drag', ['event'])
onDrag(e) { ... }
每次事件发生时,变化检测也会发生,因为事件是异步操作。
但是,当手动触发拖动事件时,我似乎无法进行变化检测。
let event = new Event('drag');
fixture.nativeElement.dispatchEvent(event);
这将调用拖动侦听器,但不会触发变化检测。
需要说明的是,我知道我可以手动触发事件,然后也可以手动调用 detectChanges()
,但我希望事件能够像现实生活中那样触发变化检测。
我错了,fixture.nativeElement.dispatchEvent(event);
确实会触发更改检测。这在监视 component.ngZone.run
.