2016-12-12 21 views
0

尽管事实上我是Angular的初学者,但我不知道如何最好地解决这个问题。 想象一下,我有两个用户,他们互相欠钱,用户:'A'和'B'。在AngularJS同时显示内容

'A'有5笔交易,必须支付5000美元给'B'。 'B'有50000笔交易,必须支付100000美元给'A'。在这一刻我看到2交易,而不是1,我必须做数学的头。代码如下所示:

$scope.charges = {}; 

totalChargeUserToFactory.query({ 
    id: null 
}).$promise.then(function (data) { 
    $scope.charges.to = data; 
}); 

totalChargeUserFromFactory.query({ 
    id: null 
}).$promise.then(function (data) { 
    $scope.charges.from = data; 
}); 

所以我决定改就解决我的问题:

$scope.charges = {}; 

totalChargeUserToFactory.query({ 
    id: null 
}).$promise.then(function (data) { 
    $scope.charges.to = data; 

    totalChargeUserFromFactory.query({ 
     id: null 
    }).$promise.then(function (data) { 
     $scope.charges.from = data; 

     for (var i = 0; i < $scope.charges.to.length; i++) { 
      for (var j = 0; j < $scope.charges.from.length; j++) { 
       if ($scope.charges.to[i].userFromId === $scope.charges.from[j].userToId) { 
        if ($scope.charges.to[i].charge < $scope.charges.from[j].charge) { 
         $scope.charges.from[j].charge = (parseFloat($scope.charges.from[j].charge) 
         - parseFloat($scope.charges.to[i].charge)).toFixed(2); 
         $scope.charges.to.splice(i, 1); 
         i--; 
        } else { 
         $scope.charges.to[i].charge = (parseFloat($scope.charges.to[i].charge) 
         - parseFloat($scope.charges.from[j].charge)).toFixed(2); 
         $scope.charges.from.splice(j, 1); 
         j--; 
        } 
       } 
      } 
     } 

    }); 
}); 

而现在真正的问题occures。有了这么多的交易,需要时间才能加载内容。当刚刚加载A时,B加载2秒钟,然后出现在屏幕上。它看起来不太好...你能给我一些提示如何避免这种情况吗?基于这个代码?我将不胜感激。

我一直在寻找谷歌找到解决方案,但我找不到任何satysfying,这直接影响我的问题。

回答

3

如果在$q.all()的帮助下解决了这两个承诺,则可以使用初始设计并执行一些代码。

$scope.charges = {}; 

var q1 = totalChargeUserToFactory.query({ 
    id: null 
}).$promise.then(function (data) { 
    $scope.charges.to = data; 
    return data; 
}); 

var q2 = totalChargeUserFromFactory.query({ 
    id: null 
}).$promise.then(function (data) { 
    $scope.charges.from = data; 
    return data; 
}); 

$q.all([q1, q2]).then(function(data) { 
    // do math here 
}) 
0

你可以使用$ q.all要等到所有的API调用都显示任何东西之前完成。

$q.all([ 
    totalChargeUserToFactory.query({ 
    id: null 
    }), 
    totalChargeUserFromFactory.query({ 
     id: null 
    }) 
]).then(function(values) { 
    $scope.charges.to = values[0]; 
    $scope.charges.from = values[1]; 
    });