我正在对ngResource上的原始(预发送)和新(发送后)数据进行一些缓存。我正在使用$resource
拦截器response
和responseError
。
问题出现了:在response
中,参数有一个属性resource
,它允许我在将资源传回调用者之前对其进行操作。
在responseError
中,没有这样的属性,那么我该如何操纵资源?
代码示例:
update: { method: 'put', isArray: false, interceptor: {
response: function (response) {
// clear my pristine cache
// I have access to response.resource
angular.copy(pristineData,response.resource);
return(response);
},
responseError: function (response) {
// the PUT failed, I want to reset the data
// need to reset the data to pristine
// "pristineData" is cached elsewhere
// HOW DO I DO THIS, SINCE response.resource UNAVAILABLE?
angular.extend(response.resource,pristineData);
}
}},
答案 0 :(得分:0)
没有真正好的答案,所以这就是我所做的。
我创建了自己的$save
,调用$create
或$update
,然后使用promise处理程序进行更改。
factory('Resource',['$resource','_','$q',function ($resource,_,$q) {
return function(url,params,methods){
var defaults = {
update: { method: 'put', isArray: false, interceptor: {
response: function (response) {
// do pristine cache setting here
return(response);
}
}},
create: { method: 'post',interceptor: {
response: function (response) {
// do pristine cache setting here
return(response);
}
}},
}, resource = $resource(url,params,angular.extend(defaults,methods));
// need to change $save *after* creating $resource
resource.prototype.$save = function() {
var that = this;
return this.id ? this.$update.apply(this,arguments).then(null,function (result) {
// reset from pristine cache here
}) : this.$create.apply(this,arguments);
};
}]);