【问题标题】:Watching for changes in $scope观察 $scope 的变化
【发布时间】:2018-02-26 20:13:16
【问题描述】:

下面是我用来将我的 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在刷新页面后更新。

是否也可以实时更新后者?

【问题讨论】:

  • 显示你的 html 模板代码。
  • 显示更多代码或创建一个小提琴来重现您的问题。
  • 您发布的代码 sn-p 是单个方法的一部分,还是只是 $onInit() 的整个代码块?如果上面的代码在一个方法中,并且从某个地方调用,它可能会显示错误发生的原因(例如 $firebaseArray 仅在调用该方法时被调用)。
  • 你能用 $scope.sum 方法更新你的问题,以便我可以帮助你。
  • @MuruGan 谢谢

标签: javascript angularjs firebase web-applications firebase-realtime-database


【解决方案1】:

假设

  • Angular 1.x.x
  • $scope.totalPoints 是一个数字(原始)

可能是$scope.totalPoints 正在被子作用域(可能是嵌套指令或控制器)使用,这就是更改没有传播给它们的原因。尝试将 totalPoints 包裹在里面和对象。

$scope.state = {
  totalPoints: 0
};

在模板和 firebase 回调中进行必要的更改。

如果这不起作用,请尝试使用手动请求摘要周期

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

【讨论】:

    【解决方案2】:

    为什么不直接在回调中设置为

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

    而不是

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

    这会将结果直接绑定到作用域变量中

    【讨论】:

    • 谢谢,但这仍然不起作用。当我在 firebase 数据库中更改玩家目标时,总和没有变化,直到我刷新页面。
    猜你喜欢
    • 1970-01-01
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    • 2012-08-05
    • 2010-11-09
    • 2015-09-13
    • 1970-01-01
    • 2020-07-29
    相关资源
    最近更新 更多