gpt4 book ai didi

javascript - 在 ngAfterViewInit 中使用销毁 View 进行 changeDetection

转载 作者:行者123 更新时间:2023-11-30 07:01:51 24 4
gpt4 key购买 nike

我工作的组织中的一个私有(private)(但开源)Angular 包有一些代码如下所示:

ngAfterViewInit(): void {
setTimeout(() => {
this.changeDetector.detectChanges();
// do more things
});
}

我们在我们的应用程序中实现了这个包(这个包是为了引入通用组件,这样整个组织的前端开发人员就不会多次实现,并且为了一致性而强制使用通用设计语言)。但是,当使用这个调用的组件时,反复显示和销毁组件,最终它会停止工作,并在控制台中出现以下错误:

Error: ViewDestroyedError: Attempt to use a destroyed view: detectChanges

我正在尝试找到一种方法来确保在组件已经被销毁的情况下不会运行上面的代码。我考虑过使用 ngOnDestroy 生命周期方法:

ngOnDestroy(): void {
this.changeDetector.detach();
}

但我不确定我还要放什么来检查 View 是否正常。我还想过类似的事情:

if (!this.changeDetector.destroyed) {
this.changeDetector.detectChanges();
}

ChangeDetectorRef 上不存在类似destroyed 的东西。

确保此错误不显示并且组件正常工作的正确方法是什么,即使在重复显示和销毁它时也是如此?

最佳答案

我认为我找到的最佳解决方案是使用 !ViewRef.destroyed,如果返回真则继续,否则不要。

if (!(this.changeDetector as ViewRef).destroyed) {
this.changeDetector.detectChanges()
// do other tasks
}

关于javascript - 在 ngAfterViewInit 中使用销毁 View 进行 changeDetection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48422245/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com