2014-02-25 23 views
2

我正在做一些ngResource上的原始(預發送)和新的(後發送)數據緩存。我爲responseresponseError使用$resource攔截器。如何使用responseError攔截器獲取ngResource中的原始資源?

這是問題:在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

我不確定但是,您可以直接嘗試訪問定義responseError中update方法的資源變量。 – Chandermani

+0

@chandermani,你失去了我? – deitch

+0

var r = $ resource(「url」,{id:'@id'},{update:{method:'PUT',攔截器:{responseError:function(response){//嘗試直接訪問r。 }}}})' – Chandermani

回答

0

有沒有真正好的答案,所以這裏是我做的。

我創建了我自己的$save,它調用$create$update,然後使用承諾處理程序進行更改。

 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); 
      }; 
    }]); 
相關問題