Как получилось, что Angular не обновляется здесь?

Я довольно новичок в Angular, и я использую firebase в качестве моего backend. Я надеялся, что кто-то сможет отладить эту проблему. Когда я впервые перейду на страницу www.mywebsite.com/#defaultHash, данные не загружаются в DOM, это происходит после посещения другой хеш-ссылки и возврата.

Мой controller выглядит так:

/* initialize data */ var fb = new Firebase('https://asdf.firebaseio.com/'); /* set data to automatically update on change */ fb.on('value', function(snapshot) { var data = snapshot.val(); $scope.propertyConfiguration = data.products; console.log($scope.propertyConfiguration); console.log("Data retrieved"); }); /* save data on button submit */ $scope.saveConfigs = function(){ var setFBref = new Firebase('https://asdf.firebaseio.com/products'); setFBref.update($scope.propertyConfiguration); console.log("configurations saved!"); }; 

У меня есть три hash-маршрута: «Совместно», «Регистрация» и «Домой» с иначе.redirectTo установлено в «Shared». (Все они используют этот controller) Вот ошибка: (все «ссылки» – это href = #hashWhereever “)

1) Перейдите на сайт website.com/#Shared или просто обновите. Журналы консоли $ scope.propertyConfiguration и «Data Retrieved». DOM ничего не показывает.

2) Нажмите на веб-сайт.com/#Registration , консоль правильно зарегистрирует данные области области, DOM загружен правильно.

3) Вернитесь на веб-сайт.com/#Shared , консоль правильно зарегистрирует данные области области, но на этот раз DOM загрузится правильно.

4) Обновление в настоящий момент правильно загружено. Website.com/#Shared . Элементы DOM исчезают.

Поскольку $ scope.data верна во всех случаях здесь, не должен Угловой убедиться, что DOM правильно отражает модель? Почему DOM загружается правильно, только когда я нажимаю на страницу из другой ссылки.

Я могу «исправить» его, добавив window.location.hash = «Shared», но он выдает огромное количество ошибок в консоли.

FIXED : (sorta)

Функция $ scope. $ Apply () заставляет просмотр синхронизировать с моделью. Я бы ответил на этот вопрос сам и закрою его, но мне все еще интересно, почему представление неправильно загружается, когда я правильно присваиваю значение $ scope. Если «грязная проверка» «Угловая» проверяет, когда появилась возможность изменения модели, не присваивает значение переменной $ scope overqualify?

Угловое не знает, что вы присвоили значение $ scope.variable. Здесь нет никакой магии. Когда вы запускаете директиву (ng-click / ng-submit) или угловые внутренние функции, все они вызывают $ apply () и запускают дайджест (проверка грязных флагов и процедура обновления).

Возможно, более безопасный подход, чем $ apply, будет использовать $ timeout. В настоящее время, если вы вызываете операцию записи в Firebase, она может синхронно запускать прослушиватель событий (child_added, child_changed, value и т. Д.). Это может привести к тому, что вы вызовете $ apply, пока находитесь в пределах области $ apply. Если вы это сделаете, появится ошибка. $ timeout обходит это.

См. Этот SO-вопрос немного больше о теме дайджеста и $ timeout.

Этот документ в «Руководстве для разработчиков углов» описывает, как работает компиляция ; очень хороший фон для любого серьезного Углового разработчика.

Кроме того, вы можете сэкономить немало энергии, используя официальные привязки Firebase для Angular , которые уже учитывают все эти детали реализации.

Смутно связанное примечание. В недалеком будущем Angular сможет использовать магию Object.observe для обработки этих обновлений.

  • Как сохранить счет пользователей в firebase и получить его в режиме реального времени в студии Android
  • Как скрыть элемент от просмотра Recycler в определенном состоянии?
  • Google Firebase выйдет и забудет пользователя в Android-приложении
  • Как обновить «массив объектов» с помощью Firestore?
  • не может получать значения из метода ondatachange
  • Уведомление о облачных сообщениях Firebase, которое не получено устройством
  • Включение CORS в облачных функциях для Firebase
  • Облачные функции для запуска Firebase вовремя?
  • Как изменить шаблон проверки sms в firebase phone auth
  • Как отправлять уведомления о блатной базе аудитории через HTTP
  • Как использовать временную метку сервера Firebase для создания даты?
  • Давайте будем гением компьютера.