Я обновил приложение Electron, которое я недавно унаследовал от Angular 6 до Angular 8. Использование zone.js 0.9.1 (обновление: основная причина - ошибка в этой версии zonejs - см. Мой ответ ниже)
Следовал инструкциям по обновлению и т. Д., Все компилировалось и работало нормально - пока я не начал запускать действия, которые обновляют модели, и замечаю, что представление обновляется не сразу. Я заметил следующее поведение: если я что-то делаю, например, щелкаю вкладку, открываю диалоговое окно или нажимаю кнопку, представление не обновляется, пока я не нажму что-то еще.
Я понял, что это было какое-то обнаружение измененийили проблема зоны, но все остальное работало нормально. Но по какой-то причине зона не распознавала изменения модели, и поэтому представление не обновлялось до тех пор, пока его не вызвало другое действие, например щелчок.
У меня есть некоторый опыт работы с обновлением видов после внесения изменений вне Angular и т. Д. Я экспериментировал с обработкой нескольких обработчиков событий в обещании зоны следующим образом:
this.zone.run(() => ...do the stuff it was doing before... )
И это сработало - после перекомпиляции приложения я теперь вижу обновление вида сразу после нажатия кнопки и открытия диалогакак это было в Angular 6.
Но потом я обнаружил, что многие изменения, для которых у меня нет собственных обработчиков, также не работают, например, изменение вкладок внутри mat-tab-group
и диалоговых кнопок по умолчанию.
Так что это превращается в кроличью нору - возможно, я мог бы реализовать собственные обработчики событий для каждого отдельного нажатия и нажатия кнопки, но это кажется огромной и ненужной болью в заднице, особенно если учесть, что я ничего не делалИзменения в самой логике приложения, просто обновление до Angular 8. Возможно, я что-то забыл или имею какой-то странный / особый случай, потому что это электронное приложение (я не сталкивался с этими проблемами при недавнем преобразовании веб-приложения из углового 6 в 8 с использованием того же процесса).
Я в тупике. Надеясь, что сообщество может указать на мою проблему и решение - если ничего не поможет, я просто напишу кучу пользовательских обработчиков и заверну каждую строку кода в this.zone.run(()=>...)
- спасибо!