Gle*_*ift 3 javascript rest resourceproviderfactory angularjs angular-services
给出angular.js服务:
angular.module('mymodule').factory('Products', ['$resource',
function($resource) {
return $resource('/path/to/getProducts', {}, {
find: {
method: 'GET',
isArray: false
}
});
}
]);
Run Code Online (Sandbox Code Playgroud)
在mymodule我的控制器中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
}
});
};
Run Code Online (Sandbox Code Playgroud)
它工作正常,但返回$ promise和$使用数据集解析,因此我无法遍历我的数据.
角单证说的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;
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
然后在你的控制器中:
Products.find().$promise.then(
function(products){
angular.forEach(products, function(value, index){
console.log(value);
});
}
);
Run Code Online (Sandbox Code Playgroud)
告诉我这是否适合你.
| 归档时间: |
|
| 查看次数: |
1566 次 |
| 最近记录: |