Эта ошибка возникает, когда вы пытаетесь получить сервис из injector, который уже уничтожен. Обычно это происходит, когда код пытается получить доступ к зависимостям после уничтожения компонента, директивы или модуля.
Типичные сценарии
Доступ к сервисам в callbacks после уничтожения
Когда компонент уничтожается, уничтожается и его injector. Если асинхронный callback позже пытается получить доступ к сервисам, возникает эта ошибка:
@Component(/* ... */)
export class UserProfile implements OnInit {
private userClient = inject(UserClient);
ngOnInit() {
setTimeout(() => {
// ERROR: If component was destroyed before timeout fires,
// the injector is no longer available
this.userClient.fetchData();
}, 5000);
}
}
Доступ к сервисам после отписки
Похожие проблемы возникают с observables, если очистка выполняется в неправильном порядке:
@Component(/* ... */)
export class DataView implements OnDestroy {
private dataStore = inject(DataStore);
ngOnDestroy() {
// Problematic: attempting to use the injector during destruction
// after other cleanup may have occurred
this.dataStore.cleanup();
}
}
Отладка ошибки
Чтобы исправить эту ошибку:
Проверьте асинхронные операции — убедитесь, что callbacks, promises и подписки отменяются при уничтожении компонента. Используйте
takeUntilDestroyed()илиDestroyRefдля очистки.Захватывайте зависимости заранее — храните ссылки на сервисы в полях класса, а не обращайтесь к injector в callbacks.
Защищайтесь от уничтоженного состояния — для операций, которые могут пережить компонент, проверяйте, активен ли компонент, перед доступом к сервисам.
@Component(/* ... */)
export class UserProfile implements OnInit {
private destroyRef = inject(DestroyRef);
private userClient = inject(UserClient);
ngOnInit() {
// Use takeUntilDestroyed to automatically cancel when destroyed
interval(5000)
.pipe(takeUntilDestroyed(this.destroyRef))
.subscribe(() => {
this.userClient.fetchData();
});
}
}
Stack trace указывает, где был доступ к уничтоженному injector. Идите назад, чтобы определить асинхронную операцию, пережившую свой компонент.