我正在尝试计算一个数组并将结果放在我的视图中。无论我尝试什么,都要保持零。
查看:
{{custTotal}}
控制:
$scope.customers = []; //loaded from a factory
function getTotal() {
var total = 0;
total = $scope.customers.length;
$scope.custTotal = total;
}
function init(){
$scope.customers = customersFactory.getCustomers();
getTotal();
}
init();
试着看着$范围,没有帮助:
$scope.$watch('customers', function() {
$scope.ordersTotal = $scope.customers.length;
});
其他信息加载正常。不知道!
更新:
解决方案仍然没有领先优势。该对象加载正常。 $ scope有效。我正在使用Firebase作为后端。如果我将getTotal()方法更改为:
function getTotal() {
var total = 0;
total = $scope.customers; // Remove .length
$scope.custTotal = total;
}
我的{{custTotal}}会将其加载到视图中:
[{"city":"Rutten","id":1,"joined":"2011-05-02","name":"Tanner","orders":[{"id":2,"product":"Left shoe","total":2.95}],"$id":"0","$priority":null},{"city":"San Francisco","id":2,"joined":"2011-12-12","name":"Joffrey","orders":[{"id":1,"product":"Right shoe","total":4.95},{"id":2,"product":"Left shoe","total":9.95}],"$id":"1","$priority":null}]
所以它加载我的对象,但拒绝计算其长度
答案 0 :(得分:0)
在getTotal()
完成请求服务器后,您应该触发getCustomer()
功能。
你的init应该是这样的:
function init() {
// Assuming your getCustomers function returns a promise.
$scope.customers = customersFactory.getCustomers().
then(function(){
$scope.getTotal();
});
}
答案 1 :(得分:0)
如果您仅在评估中跳过中间变量会发生什么:
{{ customers.length }}
答案 2 :(得分:0)
您应该在工厂中使用回调,以便您的结果看起来像这样:
$scope.customers = []; //loaded from a factory
$scope.custTotal = 0;
function init(){
customersFactory.getCustomers(
function(resultArray){
$scope.customers = resultArray.slice();
$scope.custTotal = $scope.customers.length;
}
);
}
init()
然后在服务器调用的回调中调用工厂内的回调函数(可能?)make ...使用这种方法,你一定要等到数据实际加载完毕。