🐞 bug report
受影响的软件包
我认为这个问题是由**@angular/core**软件包引起的。
是否为回归?
可能不是。我只在Angular >=7.0.0中尝试过。
描述
子组件的视图重复显示两次。如果你在根(app)组件中手动运行detectChanges()
,并且其中一个子组件中的可观察对象不完整,那么它的视图将显示两次。似乎Angular无法(或删除)如果有进行中的可观察对象,则分离视图。这只发生在通过路由过程渲染的子组件中,如果父组件直接在其模板中包含它,则不会重现。
🔬 最小复现
https://stackblitz.com/edit/angular-8wr99p?file=src%2Fapp%2Fapp.component.ts
- app.ts
ngOnInit() {
this.loaderService.getLoaderObservable().subscribe(show => {
this.showLoader = show;
this.changeDetectionRef.detectChanges();
});
}
- info-child-1.ts
constructor(httpClient: HttpClient, loaderService: LoaderService) {
loaderService.show();
httpClient.get('https://raw.githubusercontent.com/ag-grid/ag-grid-docs/master/src/olympicWinners.json')
.subscribe(response => {
loaderService.hide();
});
}
- 结果
🔥 异常或错误
🌍 你的环境中
Windows 10
Angular版本:
Angular CLI: 7.0.7
Node: 10.0.0
OS: win32 x64
Angular: 7.2.2
... common, compiler, core, forms, platform-browser
... platform-browser-dynamic, router
Package Version
-----------------------------------------------------------
@angular-devkit/architect 0.10.7
@angular-devkit/build-angular 0.10.7
@angular-devkit/build-optimizer 0.10.7
@angular-devkit/build-webpack 0.10.7
@angular-devkit/core 7.0.7
@angular-devkit/schematics 7.0.7
@angular/cli 7.0.7
@angular/compiler-cli 7.0.4
@angular/language-service 7.0.4
@ngtools/webpack 7.0.7
@schematics/angular 7.0.7
@schematics/update 0.10.7
rxjs 6.3.0
typescript 3.1.6
webpack 4.19.1
还有其他相关信息吗?
4条答案
按热度按时间iklwldmw1#
如果你避免
this.changeDetectionRef.detectChanges();
,它就能正常工作。https://stackblitz.com/edit/angular-nt4tzg
velaa5lx2#
是的,我们已经这样做了。但我认为这仍然是一个bug。
z18hc3ub3#
在v10中也确认了Ivy: https://stackblitz.com/edit/angular-2mc9rl?file=src%2Fapp%2Fpages%2Finfo%2Finfo-child-1%2Finfo-child-1.component.ts
sh7euo9m4#
我无法在v15上复现它。