给定 angular.js 服务:
angular.module('mymodule').factory('Products', ['$resource',
function($resource) {
return $resource('/path/to/getProducts', {}, {
find: {
method: 'GET',
isArray: false
}
});
}
]);
在
mymodule
的 Controller 中,我进行 find
查询:$scope.findAll = function () {
Products.find(function (products) {
console.log(Object.keys(products));
// ['prodA', 'prodB', ... , '$promise', '$resolved']
for (var i in products) {
if (!products.hasOwnProperty(i)) continue;
console.log(products[i].description.someprop);
// Got error: Cannot read property 'someprop' of undefined
// Trust me: I debug this place. someprop is defined for all items except that two
}
});
};
它工作正常,但返回 $promise 和 $resolved 数据集,因此我无法遍历我的数据。
Angular 文档 says 表明
Resource
实例和集合具有这些附加属性。但我不明白如何在我的代码中控制它。我究竟做错了什么?如何预防?
最佳答案
实际上,当您不使用数组时,情况会复杂一些。
从服务器发回的 response
对象包含:
resource
对象(您的数据 + $promise
和 $resolved
,这就是您在回调中得到的) config
对象(标题、使用的方法、调用的 url 等)和一个 headers
函数 data
对象,这就是我们想要的!它只包含数据。 但是您只能在
response.resource
中看到 then()
。因此,您需要拦截服务器发送的响应以获取数据:return $resource('/path/to/getProducts', {}, {
find: {
method: 'GET',
isArray: false,
interceptor: {
response: function(response) {
return response.data;
}
}
}
});
然后在您的 Controller 中:
Products.find().$promise.then(
function(products){
angular.forEach(products, function(value, index){
console.log(value);
});
}
);
告诉我这是否适合你。
Plunker Demo
关于javascript - Angular.js resourceProvider 返回带有数据的 $promise,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26122008/