Обнаружение изменений перестало работать в приложении Electron при использовании zone.js 0.9.1 - PullRequest
0 голосов
/ 01 октября 2019

Я обновил приложение 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(()=>...) - спасибо!

1 Ответ

1 голос
/ 02 октября 2019

Поскольку я уже исправлял многочисленные проблемы, связанные с переходом на Angular 2-версию, я упустил из виду ошибку консоли («Не могу прочитать свойство 'eventNames' of undefined»), которая, на первый взгляд, была не связана, но, да,заметил в стеке zone.js.

Провел еще несколько исследований и обнаружил, что это известная проблема с zone.js версии 0.9.1 и Electron (см. https://github.com/angular/angular/issues/31626)

. Я был толькона этой версии из-за параллельного проекта (не Electron), который работал нормально и был на 0.9.1, поэтому я чувствовал, что по какой-то причине мне хотелось их синхронизировать, но после обновления до 0.10.2 ошибка eventNames исчезла, иОбнаружение изменений работает нормально. Все это было связано с некоторой функцией-заглушкой, которая возвращала undefined вместо объекта с eventNames.

Спасибо за чтение, обновление до последнего сработало, и, к счастью, проблема была исправлена ​​простопару недель назад.

...