我在下面有一个简单的工厂请求带有一些位置信息的json对象。请求有效,我可以看到数据在对象中。但不知何故存在范围问题。我无法访问位置对象的属性,即使我知道该对象具有属性和正确的数组。
您可以在下面的代码段中看到(如果您查看注释)我在尝试输出到控制台时无法访问该对象的某些值。
关于可能出现什么问题的任何想法?
.factory('Spots', function(){
return{
all: function($resource){
var locations;
var Locations = $resource('http://localhost\\:3000/locationsd/');
locations = Locations.get(function(){
console.log(locations.results[0].obj.name); // THIS WORKS -> gives me the name of the location
});
console.log(locations); // THIS WORKS -> log an object with a result array, etc.
console.log(locations.results[0].obj.name); // THIS DOESNT WORK -> TypeError: Cannot read property '0' of undefined
return locations;
}
}
})

答案 0 :(得分:1)
这是因为它是异步的。要在服务中正确使用$ resource,您应该使用promises。
.factory('Spots', function(){
return{
all: function($resource){
var Locations = $resource('http://localhost\\:3000/locationsd/');
return Locations.get().$promise.then(function(res){
return res;
});
}
}
})
然后从你的控制器调用该函数时:
Spots.all().then(function(res){
//do stuff with res here
})
如果您不知道承诺是什么,请在此处阅读:https://docs.angularjs.org/api/ng/service/ $ q
一般的想法是它最终会完成的资源承诺,当它完成后,它会调用你传递给then()
的函数。