【问题标题】:AngularJS - forEach() with empty array from $resourceAngularJS - forEach() 与 $resource 中的空数组
【发布时间】:2016-12-22 20:23:25
【问题描述】:

我有一个从服务中获得的数组,但在控制器中,我在forEach() 函数中获得了一个空值。这是code

控制器

这里,“products”和“copyProducts”都是空的。我需要在forEach() 函数中使用“copyProducts”数组。

app.controller("controllerApp", function($scope, serviceApp){

  var products = serviceApp.query(); 
  $scope.copyProducts = products;

  angular.forEach($scope.copyProducts, function(value, key){
    console.log("object: "+value);
  })

});

服务

app.factory("serviceApp", function($resource){
  return $resource("products.json", {}, {
        getAll: {
            method: "GET",
            isArray: true
        }
    })
})

【问题讨论】:

    标签: javascript angularjs arrays foreach


    【解决方案1】:

    您的代码是错误的,因为.query() 是异步的,因此它不会立即完成,并且下一行的结果也没有同步准备好。所以它需要一个回调函数来触发它的工作。

    serviceApp.query().$promise.then(function(res) {
      $scope.products = res;
      $scope.copyProducts = res;
      angular.forEach($scope.copyProducts, function(item) {
        console.log(item)
      })
    });
    

    替代方案:

    serviceApp.query({}, function(res, headers){
      //etc
    });
    

    顺便说一句,如果您想使用您在资源中定义的 getAll 方法,那么您将使用 query()

      serviceApp.getAll().$promise.then(function(res){}).....etc
    

    【讨论】:

    • 是的,只是为了指出错误的原因, .query() 是异步的,因此它不会立即完成,因此它需要一个回调函数来触发它的工作。另请注意,包含错误处理功能也很好(如果您没有此功能,默认情况下 $qProvider 现在会抱怨)
    猜你喜欢
    • 2015-04-11
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    相关资源
    最近更新 更多