ngresource访问属性资源时出错

时间:2015-06-25 19:38:19

标签: javascript json angularjs geojson

我在下面有一个简单的工厂请求带有一些位置信息的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;
            }
        }
    })




1 个答案:

答案 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()的函数。