从json对象中删除$ promise和$ resolved不起作用

时间:2016-06-09 11:19:40

标签: angularjs json

我正在使用$resource这样的服务器从服务器获取数据

服务

.factory('rulesService', ['$resource', function ($resource) {
    var systems = $resource('url');
    return systems;
}]);

控制器

$scope.rules= rulesService.query();
console.log($scope.rules);

我得到的输出是

0: Resource
1: Resource
$promise: Promise
$resolved: true
length: 2

我试图剥离$promise& $resolved使用

1)angular.toJson($scope.rules)

2)JSON.stringify($scope.rules, null, 2)

这两个都在返回[]

有人可以帮助我吗

3 个答案:

答案 0 :(得分:1)

阅读完上述评论后,我认为您的问题是您使用$ resource错误。

$ resource将返回一个空对象或数组,然后在后台进行http调用,并在数组/对象完成后填充它。

这意味着,当你在console.log对象时,它实际上是一个空数组,但由于浏览器中的日志非常聪明,所以一旦$ resource,它也将更新日志中的对象电话已经完成。

这就是为什么console.log(rules [0])未定义,而console.log(rules)表示元素存在。它没有记录日期。

如果您需要进一步处理,您必须执行以下操作:

var rules = rulesService.query(function () {
  console.log(rules[0])
})

您也可以使用promises而不是回调,但无论哪种方式,您都需要确保数据已满载

答案 1 :(得分:0)

您应该能够简单地遍历数组(并忽略额外的属性)。如果你想要一个干净的阵列,你总是可以使用地图或类似的。

$scope.new_rules = $scope.rules.map(function (rule){
  return rule;
})

答案 2 :(得分:0)

您的问题与异步执行和竞争条件有关。

在数据从rules[0]电话实际到达之前,您是否尝试引用$resource.query()

示例:

var rules = rulesService.query();
console.log(rules[0]); //will print nothing. the GET request hasn't been resolved yet.

rules.$promise.then(function (response) {
 console.log(rules[0]); //This WILL work assuming you actually get data from the backend.
 console.log(response[0]); //This will also work with the same data.
});