Могу ли я использовать обновление $$ при расширении firebase factory для запуска функции getTotal(), как в примере?

Могу ли я получить то, что возвращается обновленным $$ или обновлено через $$, запустить функцию, которую я могу получить каждый раз, когда задача отключена?

В конце дня мне нужно следить за количеством заданий пользователей. Кажется, что у firebase есть способы автоматической синхронизации этих данных, но неясно, как это сделать. У меня возникли проблемы с функциями $watch и running, когда задача завершена. Это похоже на интересный способ сделать это, но я не могу собрать эти штуки.

Здесь работает plnkr кода ниже: http://plnkr.co/edit/iAGvPHFWn2GSPGzBRpKh?p=preview

// Code goes here
angular.module('app', ['firebase']);

angular
  .module('app')
  .controller('main', function($scope, $firebase, $timeout, $window, ListWithTotal) {

  var ref = new Firebase("https://plnkr.firebaseio.com");
  $scope.listWithTotal = ListWithTotal(ref);

  $scope.addTask = function(task) {  
    $scope.listWithTotal.$add({
      title: task.title,
      complete: false,  
      tally: 0  
    });
    task.title = ''; 
  };

  $scope.completeTask = function(task) {  
    if (task.complete === true) {
      task.complete = true;
      task.tally = 1;
    } else { 
      task.complete = false;
      task.tally = 0;
    }
    $scope.listWithTotal.$save(task);
  };

  $scope.tallyCount = '';
  //it would be cool if I can get tallyCount to receive 
  //the result of getTotal or automagically with $$updated. 


}).factory("ListWithTotal", ["$FirebaseArray", "$firebase", function($FirebaseArray, $firebase) {
  // create a new factory based on $FirebaseArray
  var TotalFactory = $FirebaseArray.$extendFactory({
    getTotal: function() {
      var total = 0;
      angular.forEach(this.$list, function(rec) {
        total += rec.tally;
      });
      return total;
    },
    $$updated: function(){
      return this.$list.getTotal();
    }
  });
  return function(listRef) {
    var sync = $firebase(listRef, {arrayFactory: TotalFactory});
    return sync.$asArray(); // this will be an instance of TotalFactory
  };
}]);

Ответ 1

Если вы хотите обновить все завершенные задачи, вы можете добавить then в точку, в которой вы сохраняете задачу:

$scope.listWithTotal.$save(task).then(function() {
  $scope.tallyCount = $scope.listWithTotal.getTotal();
});

Блок then выполняется после сохранения задачи и добавляет результат завершенных задач в текущую область.