🐞 bug报告
受影响的软件包
@angular/http@6.1.10
zone.js@0.8.26
描述
通过 HttpClient#get
发起的 HTTP 请求在响应可用时触发两次变更检测。
🔬 最小复现
有一个最小示例在 https://stackblitz.com/edit/angular-issue-repro2-upg7ax
在这个示例中,AppComponent#ngDoCheck
被调用了 4 次。
- 前两次调用似乎在任何应用程序的引导过程中都是正常的(尽管没有记录)。
- 第3次和第4次调用是 HTTP 请求触发的结果。有一个由
readystatechange
事件触发的变更检测,另一个是由load
触发的(也请参阅下面的截图中的调用树)。在这种情况下,只应触发一次变更检测。从变更检测的Angular 来看,其中一个是冗余的,并降低了应用程序的性能。
🌍 您的环境
Angular 版本:
Angular CLI: 6.2.8
Node: 8.11.3
OS: darwin x64
Angular: 6.1.10
... animations, common, compiler, compiler-cli, core, forms
... http, language-service, platform-browser
... platform-browser-dynamic, router
Package Version
-----------------------------------------------------------
@angular-devkit/architect 0.8.8
@angular-devkit/build-angular 0.8.8
@angular-devkit/build-optimizer 0.8.8
@angular-devkit/build-webpack 0.8.8
@angular-devkit/core 0.8.8
@angular-devkit/schematics 0.8.8
@angular/cli 6.2.8
@ngtools/webpack 6.2.8
@schematics/angular 0.8.8
@schematics/update 0.8.8
rxjs 6.2.2
typescript 2.9.2
webpack 4.16.4
3条答案
按热度按时间7tofc5zh1#
3b6akqbq2#
就我所知,这似乎是
zone.js
处理XMLHttpRequest
的一种方式,通过添加onreadystatechange
监听器(HttpXhrBackend
不使用该事件)。也许@JiaLiPassion对此比我更了解。lmyy7pcs3#
我会检查这个问题,感谢提出问题。