Angular不计算数组中的对象

时间:2014-11-13 13:23:18

标签: angularjs

我正在尝试计算一个数组并将结果放在我的视图中。无论我尝试什么,都要保持零。

查看:

{{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}]

所以它加载我的对象,但拒绝计算其长度

3 个答案:

答案 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 ...使用这种方法,你一定要等到数据实际加载完毕。