我正在使用$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)
这两个都在返回[]
有人可以帮助我吗
答案 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.
});