Я понял это.
Ответ заключается в том, как Angular меняет обнаружение.В блоге Zones in Angular это объясняется лучше всего, но вкратце Angular полагается на изменения состояния (события, удаленные выборки и т. Д.), Чтобы инициировать обнаружение изменений.Эти изменения состояния отслеживаются только в том случае, если они происходят в угловой зоне.
Мой стек-блиц с проблемой выходит из зоны, поскольку некоторые из Google JS (gapi.load()
) работают вiFrame - я думаю.В любом случае, это то место, где выполнение выходит из Зоны Angular.
Вот обновленный стек с реализацией, которая работает.
Что я здесь сделалэто обернуть gapi.load()
в Promise
, чей контекст находится в зоне.Кроме того, разрешение Promise
s - это событие, которое запускает логику обнаружения изменений Angular.
Это было сложным для новичка Angular, такого как я, отследить, но я многому научился.Если эта тема вас интересует, это сообщение в блоге сделает еще один шаг вперед и поговорим о том, как улучшить качество рисования.