Я получил ошибку в своем угловом проекте, которая в конце концов была решена путем переноса моего кода в
this.zone.run(() => {/* my code here */});
как сказано в этом ответе.
Мое предыдущее понимание zone
было то, что angular не может обнаружить изменения, сделанные асинхронным callbacks
сторонних библиотек, потому что "они не находятся в angular zone
". Если я щелкну на button
, событие, которое вызывается, будет не собственным событием браузера click
, а пользовательским (исправленным) событием click
, созданным angular, чей handler
выполняется в zone
, так что angular знает о изменения, сделанные его обработчиком обратного вызова.
Но я не мог понять, запустив router.navigate()
в обратном вызове третьей стороны, создать эту проблему (как указано этой проблемой github). Разве Router
не является service
самого угла? Почему он не сообщает автоматически angular zone
при вызове третьей стороне callback
?
Я получил эту проблему, используя router.navigate
в редукторе состояний NGXS.
Мой вопрос:
Может кто-нибудь объяснить, когда именно мне нужно обернуть мой код в NgZone
?
Отладка в течение нескольких часов и осознание того, что мой код находится вне контекста zone
, утомительна.