У меня есть компонент, который выполняет некоторые сервисные вызовы и получает обещания. После того, как обещания разрешены, я делаю обнаружение изменений. Но иногда обещания разрешаются, когда представление компонента уже уничтожено, например, закрытая вкладка пользователя (внутренняя вкладка нашего приложения). В этом случае я получаю
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
Я отключаю вид от C.D
ngOnDestroy() {
this.cd.detach();
}
Обещания важны для меня в этом случае, потому что мне действительно нужно выполнить некоторые вычисления / сохранение состояния, даже если компонент уничтожен. Я просто хочу понять, как я могу отсоединить представление достаточно хорошо, чтобы мой код внутри обещания не вызывал попыток обнаружения изменений.