【发布时间】:2019-05-09 21:08:10
【问题描述】:
我有一个组件可以进行一些服务调用并获得承诺。承诺解决后,我正在做检测更改。但是有时当组件视图已经被销毁时,承诺会被解决,例如用户关闭的选项卡(我们应用程序的内部选项卡)。在那种情况下,我得到
ViewDestroyedError: Attempt to use a destroyed view: detectChanges。即使我已经分离了我的 tab.component 的销毁阶段的视图。我的问题是我在这里做错了什么?
我试图将视图从销毁阶段的更改检测中分离出来,但没有运气,在销毁阶段后承诺正在解决,并且仍然调用 detectChanges。我确实理解 ngOnDestroy 实际上并没有销毁该类,并且其中的代码将在垃圾收集阶段被销毁。
这是我的 tab.component 中导致问题的示例代码
const promises:Promise<any>[] = [];
_.each(types, (type:string) => {
promises.push(this.service.getResultsBy(type))
})
Promise.all(promises)
.then((data) => {
//some code here
this.cd.detectChanges();
})
在ngOnDestroy 中,我将视图与 CD 分离
ngOnDestroy() {
this.cd.detach();
}
在这种情况下,承诺对我来说很重要,因为即使组件被销毁,我也确实需要进行一些计算/状态保存。我只是想了解如何将视图分离得足够好,以使我在 promise 中的代码不会导致更改检测尝试。
【问题讨论】:
标签: angular promise angular2-changedetection