angular - 如何手动触发事件并进行更改检测?
问题描述
当我拖动组件的根元素时,假设组件中存在拖动侦听器,例如:
@HostListener('drag', ['event'])
onDrag(e) { ... }
每次事件发生时,变更检测也会发生,因为事件是异步操作。
但是,当手动触发拖动事件时,我似乎无法进行更改检测。
let event = new Event('drag');
fixture.nativeElement.dispatchEvent(event);
这将调用拖动侦听器,但不会触发更改检测。
为了清楚起见,我知道我可以手动触发事件,然后detectChanges()
也可以手动调用,但我希望事件能够像在现实生活中一样触发更改检测。
解决方案
我错了,fixture.nativeElement.dispatchEvent(event);
会触发变更检测。监视时很容易看到这一点component.ngZone.run
。
推荐阅读
- html - 是否有“-webkit-font-smoothing”的通用形式?
- java - 如何使用具有异构视图类型的项目触摸助手?
- r - 高 GLMER 色散参数
- ios - Swift:单击 tableViewCell 会打印错误的索引号
- javascript - 需要做些什么来实现对 Javascript 的多屏幕支持?
- flutter - Flutter:如何在构建方法之前在小部件上发出一系列 http 请求
- r - 根据条件返回数组中具有 NA 的矩阵的索引
- javascript - 如何构建一个数据表,顶部有一个保管箱过滤器,在后端计算?
- java - Android Studio - Gradle 同步
- python-3.x - 如何使用 Selenium 和 python 检查 Chrome 中的复选框