0

Unten ist der Code verwende ich die ausgewählten Spieler von meiner Feuerbasis databse meinen Umfang zu bringen:

var orderedPlayers = databaseService.players.orderByChild("id"); 
$firebaseArray(orderedPlayers) 
     .$loaded(function(loadedPlayers) { 
     var normalizedPlayers = loadedPlayers.reduce(function(acc, next) { acc[next.id] = next; return acc; }, {}); 
     var selectedPlayers = $scope.pick.map(function(num){ 
      return normalizedPlayers[num]; 
     }); 
     $scope.players = selectedPlayers; 

     $scope.sum =function(items, prop){ 
     return items.reduce (function(a, b) { 
     return a + b [prop]; 
     }, 0); 
     }; 
     $scope.totalPoints = $scope.sum($scope.players, 'goals');  


}, function(err) { 
    console.log(err); 
    $scope.players = []; 
}); 

Das Problem ist, dass, wenn ich die Anzahl der Ziele aus der Feuerbasis Datenbank ändern Es gibt keine Echtzeitänderung der Gesamtzahl der Punkte. d. h. $scope.players = selectedPlayers; Updates in Echtzeit, aber $scope.totalPoints only Updates nach dem Aktualisieren der Seite.

Ist es möglich, das letztere auch in Echtzeit zu aktualisieren?

+1

Zeigen Sie Ihre * html * Template-Code. –

+0

Zeigen Sie mehr Code oder erstellen Sie eine Fiedel, um Ihr Problem zu reproduzieren. – lin

+0

Ist das Code-Snippet, das Sie gepostet haben, Teil einer einzelnen Methode oder ist es nur der gesamte Codeblock für $ onInit()? Wenn dieser Code oben in einer Methode ist und von irgendwo aufgerufen wird, kann er zeigen, warum der Fehler auftritt (zum Beispiel wird $ fireBaseArray nur aufgerufen, wenn die Methode aufgerufen wird). – rrd

Antwort

0

warum setzen sie nicht nur in den Rückruf direkt

$scope.players = $scope.pick.map(function(num){ ... 

statt

var selectedPlayers = $scope.pick.map(function(num){ 

diese binden die Ergebnisse direkt in den Bereich Variable

+0

danke, aber das hat immer noch nicht funktioniert. Als ich die Spielerziele in der Firebase-Datenbank änderte, änderte sich die Gesamtsumme erst, nachdem ich die Seite aktualisiert hatte. –

0

Unter der Annahme,

zu sein
  • A ngular 1.xx
  • $scope.totalPoints eine Zahl (primitive)

Es könnte sein, dass $scope.totalPoints wird von einem Kind Umfang verwendet wird (vielleicht eine verschachtelte Richtlinie oder Controller), und das ist, warum die Änderung nicht erhalten propagiert haben zu ihnen. Versuchen Sie, totalPoints in das Innere und das Objekt zu wickeln.

$scope.state = { 
    totalPoints: 0 
}; 

Nehmen Sie die erforderlichen Änderungen im Template- und Firebase-Callback vor.

Wenn das nicht funktioniert, versuchen Sie manuell einen Digest-Zyklus anfordert mit

$scope.$apply(function() { 
    $scope.totalPoints = $scope.sum($scope.players, 'goals'); 
}) 
Verwandte Themen