下面是我用来将我的firebase数据库中的选定玩家带到我的范围的代码:
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 = [];
});
问题在于,当我从firebase数据库更改目标数量时,总点数不会实时更改。即$scope.players = selectedPlayers;
实时更新,但刷新页面后$scope.totalPoints only
更新。
是否有可能实时更新后者?
答案 0 :(得分:0)
为什么不直接在回调中将其设置为
values = []
for i in range(1,5):
values.append(row[i].text.replace('\xa0', ' ').split(' ')[0])
ozone, no2, so2, pm10 = values
return {'ozone': ozone, 'no2': no2, 'so2': so2, 'pm10': pm10}
而不是
$scope.players = $scope.pick.map(function(num){ ...
这会将结果直接绑定到范围变量
答案 1 :(得分:0)
假设
$scope.totalPoints
是一个数字(原始)可能是$scope.totalPoints
正由子范围(可能是嵌套指令或控制器)使用,这就是为什么更改没有传播给它们。尝试将totalPoints
包裹在内部和对象中。
$scope.state = {
totalPoints: 0
};
在模板和firebase回调中进行必要的更改。
如果这不起作用,请尝试使用
手动请求摘要周期$scope.$apply(function () {
$scope.totalPoints = $scope.sum($scope.players, 'goals');
})