2

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);
                    }
                }},
4

1 に答える 1

0

本当に良い答えはなかったので、これが私がしたことです。

または$saveを呼び出した独自のものを作成し、 Promise ハンドラーを使用して変更を行いました。$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);
            };
    }]);
于 2014-02-25T18:30:39.670 に答える