Обратные вызовы Firebase и AngularJS

Я изучаю AngularJS в сочетании с Firebase. Я действительно борюсь сon обратный вызов Firebase и пытается обновить$scope...

$apply already in progress 
 Andrew Lee25 окт. 2012 г., 18:52
Основатель Firebase здесь - это больше похоже на англоязычный вопрос, о котором я знаю лишь немного. Извините, что не помогу! В будущем мы надеемся получить несколько хороших справочных примеров и, возможно, библиотеку для поддержки Angular.
 Andrew Lee25 окт. 2012 г., 23:30
Кроме того, вы можете проверить Angular Google Group. Там'Там уже были некоторые обсуждения Firebase, такие как эта тема:groups.google.com/forum/#!topic/angular/sJzqb6UMVMQ
 MaxWillmo26 окт. 2012 г., 10:30
Очень приятно слышать от вас! Я буду следить за тем, что предлагает тема, и постараюсь сохранить Firebase как сервис. Жду ваших примеров и еще больше поиграюсь с Firebase. Спасибо!

Ответы на вопрос(1)

Решение Вопроса

Решение 1. Удалите $ rootcope. $ Apply для службы и введите и примените $ timeout к контроллеру:

firebaseService.on('child_added',function(data){        
    $timeout(function(){
        $scope.messages.push(data.val());                       
    },0);
});

Решение 2 - Реализация "SafeApply» метод (спасибо Алексу Ванстону):

$scope.safeApply = function(fn) {
        var phase = this.$root.$phase;
        if(phase == '$apply' || phase == '$digest') {
            fn();
        } else {
            this.$apply(fn);
        }
    };
 GeekyMonkey08 нояб. 2012 г., 10:37
Мне нравится это решение, однако яЯ делаю одну регулировку. Перед вызовом fn () убедитесь, чтоне является нулевым или неопределенным. if (fn) {fn (); }
 flyer25 июл. 2017 г., 22:09
Проверка значения фазы заставляет меня нервничать. Я бы с особой осторожностью использовал этот метод. Интересно, будет ли это подходящее время для использования $ scope. $ EvalAsync () (который явремя от времени мы использовали прослушиватели событий, которые требовали $ timeout).

Ваш ответ на вопрос