运行量角器测试时,它们将在使用延迟加载指令的任何组件上超时。 量角器监视 ngZone 以了解挂起的 xhr 调用、超时和间隔在运行之前何时完成。
在scroll-listener.ts
, .sampleTime(100, scheduler)
创建了一个在量角器测试期间永远不会结束的间隔。 我通过将以下代码添加到指令中找到了解决此问题的方法
ngAfterContentInit() {
this.ngZone.runOutsideAngular(() => { // run outside angular
this.scrollSubscription = getScrollListener(this._scrollTarget)
.filter(() => this.isVisible())
.take(1)
.switchMap(() => this.loadImage(this.lazyImage))
.do(() => this.setImage(this.lazyImage))
.finally(() => this.setLoadedStyle())
.subscribe(() => this.ngOnDestroy(),
error => {
this.setImage(this.errorImg || this.defaultImg);
this.ngOnDestroy();
});
});
}
根据这个https://github.com/angular/protractor/issues/3349#issuecomment -232253059 量角器监视主要的 ngZone 所以如果我们运行它的间隔,量角器运行成功。 我不确定这将如何与该项目的量角器测试一起使用,但我可以尝试在有机会时提出拉取请求。
感谢您的反馈意见。
但是,我无法重现这一点。 我在这个项目中使用了量角器,它工作得很好。 但话虽如此,使用ngZone.runOutsideAngular
来提高性能可能是个好主意。 但是如果我们使用ngZone.runOutsideAngular
,我们需要在延迟加载图像后使用ChangeDetectorRef
,对吗? 所以 angular 知道视图需要重新渲染。
由于我无法重现这一点,因此您似乎有一个可行的解决方案。 你想提交 PR 吗?
当然,我会看看我是否能在下周内得到一个:)
我创建了一个新版本的插件。 你可以试试看: npm install [email protected]
是否能解决问题?
当然! 我今天试试
关闭这个。 如果您仍然超时,请告诉我。
@tjoskar今天刚刚测试了这个,它有效,谢谢你的修复! :)
最有用的评论
当然,我会看看我是否能在下周内得到一个:)