Issue
Мы используем Angular компонент ячейки, который содержит кнопку. Я заметил, что иногда (примерно 1 из 10 раз) событие кнопки обрабатывается за пределами зоны, что приводит к проблемам.
Что я обнаружил до сих пор
agInit иногда работает за пределами зоны. Я выяснил это с помощью следующего фрагмента:
agInit(params: RendererParams): void {
const inZone = NgZone.isInAngularZone();
console.log("AgInit in Zone?: " + inZone);
}
Если agInit не находится в зоне angular, обратный вызов кнопки также не находится в этой зоне.
Я также заметил, что стек вызовов немного отличается в случае, когда agInit работает внутри нашей вне зоны:
![enter image description here](https://i.stack.imgur.com/4GFa9.png)
Вот ссылка на полный diff обоих трассировок стека : https://www.diffchecker.com/e54rZEsC
Я также заметил, что в случае ошибки стек вызовов начинается с Utils.debounce в agGrid.
Для дальнейшего изучения проблемы, я разветвил ngzone (см. фрагмент ниже). Ошибки не были зарегистрированы.
ngDoBootstrap(applicationRef: ApplicationRef) {
const debugSpec: ZoneSpec = {
name: "debugSpec",
onHandleError: (parentZoneDelegate: ZoneDelegate, currentZone: Zone, targetZone: Zone, error: any) => {
console.log(error);
return true;
}
};
Zone.current.fork(debugSpec).run(() => {
applicationRef.bootstrap(AppComponent);
});
}
Обходной путь
Я всегда могу вручную выполнить обратный вызов в пределах зоны. Это работает.