2016-12-12 49 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]; 
    });