Czy mogę otrzymać informacje o tym, co zostało zwrócony przez użytkownika $$ zaktualizowane, lub czy ma ono aktualizację $$, uruchomić funkcję, którą mogę następnie otrzymywać za każdym razem, gdy zadanie jest odliczane?
Pod koniec dnia muszę liczyć liczbę zadań wykonanych przez użytkowników. Wygląda na to, że baza Firebase ma sposoby automatycznej synchronizacji tych danych, ale nie jest jasne, jak to zrobić. Wystąpiły problemy z funkcją $ watch i uruchomieniem po zakończeniu zadania. Wygląda to na ciekawy sposób, ale nie mogę połączyć tych elementów.
Oto plnkr z poniższym kodzie pracy: 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
};
}]);
Dzięki za odpowiedź. Tak to teraz robię. Powinien istnieć sposób powiązania tej funkcji z tablicą bezpośrednio, tak aby po dodaniu/usunięciu/zmianie zadania aktualizacja odbywała się automatycznie na serwerze/lokalnie. Właśnie to staram się rozgryźć. – EmptyPockets
Nie jestem pewien, czy tego właśnie szukasz, ale to powiązanie w widoku działa: 'done count: {{listWithTotal.getTotal()}}' –
To by działało (prawdopodobnie w moim przypadku mam serię użytkowników, ale to nie ma związku), ale chcę sprawdzić, czy mogę to zrobić, zastępując funkcję $$ updated. Wydaje się, że ta funkcjonalność wewnątrz tablicy $ firebase byłaby czystsza i łatwiejsza w utrzymaniu. Będę musiał wykonać inne czynności, takie jak tworzenie kopii zadań i przenoszenie ich na różne listy, itp. – EmptyPockets