2015-09-29 14 views
6

残念ながら、私たちは1.2.26で動作していません(gemified時には1.2.28にアップグレードされます)。

その間、短期のpatchメソッドが利用できるように(httph)$ httpをどのように修正できますか?私は、サービス全体/工場/モジュールのことでかなり新しいです。私は数時間の検索をしてしまったので、それを理解できないようです。上記

myApp.factory('patchedHTTP', function($http, BasicService) { 
    // $http['patch'] = function(url, data, config) { 
    // return $http(angular.extend(config || {}, { 
    //  method: 'patch', 
    //  url: url, 
    //  data: data 
    // })); 
    // }; 
    var extended = angular.extend(BasicService, {}); 
    extended.createShortMethodsWithData('patch'); 
    return extended; 
}); 

...私が持っている最高のであり、それはXD

+0

パッチがすでにavaibleである:https://code.angularjs.org/1.2.27/docs/api/ng/service/$http#patch – Fals

+0

1.2.27がgemifiedされていませんまだ:)これをパッチ全体に少しずつパッチしたいだけです。 – Volte

答えて

3

module.decoratorがバージョン1.4のモジュールAPIに追加されました。 1.2.xでは動作しません。

下記の作業デモまたはjsfiddleをご覧ください。

$httpという約束を返すことができなかったので、私はパッチメソッドを実装するのにしばらく時間がかかりました。しかし今はそれが効いているはずです。

angular.module('patchDemo', []) 
 
.config(function ($provide) { 
 

 
    $provide.decorator('$http', function ($delegate) { 
 
     // NOTE: $delegate is the original service 
 
\t \t $delegate.patch = function(url, data, config) { 
 
      var paramsObj = angular.extend({}, config || {}, { 
 
       method: 'PATCH', 
 
       url: url, 
 
       data: data 
 
      }); 
 

 
      return $delegate(paramsObj); 
 
     } 
 
\t \t 
 
     return $delegate; 
 
    }); 
 
}) 
 
.controller('MainController', MainController); 
 

 
function MainController($http) { 
 
    console.log($http.patch); 
 
    //$http({method: 'PATCH', url: 'http://jsonplaceholder.typicode.com/posts/1', data: {title:'foo'}}); //>>>>>working long version of patch 
 

 
    $http.patch('http://jsonplaceholder.typicode.com/posts/1', { 
 
     title: 'foo' 
 
    }).then(function(response) { 
 
    \t console.log(response); 
 
    }); 
 

 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.26/angular.js"></script> 
 
<div ng-app="patchDemo" ng-controller="MainController"></div>

+0

作業が確認されました。ありがとう! – Volte

4

あなたが角度デコレータでこれを行うことができます何もしません。

サービスデコレータは、サービスの作成をインターセプトし、サービスの動作を変更または変更できるようにします。デコレータによって返されるオブジェクトは、元のサービス、または元のサービスを置き換えたり、ラップしたり、委任したりする新しいサービスオブジェクトです。 詳細については、角度documentationを確認できます。

例:あなたは、いくつかの新しいバージョンに、ちょうどそれを安全に削除するよりも、アップグレードするまで

var app = angular.module('app'); 
app.decorator('$http', function ($delegate) { 
    // NOTE: $delegate is the original service 

    $delegate.patch = function() { 
    // do the implementation here 
    }; 

    return $delegate; 
}); 

// usage 
app.controller('SomeController', function($http) { 
    $http.patch(); 
}); 

あなたは、このデコレータを維持することができます。

+0

これは素晴らしいです。ありがとう、あなたは素早く! :) – Volte

+0

いつこのコードを実行するのかわかりません。私のアプリインスタンスを見つけることができないようです。 – Volte

+0

私はそれを理解しました。 configブロックを使用しなければならなかった。これを表示するためにあなたの答えを更新したいのですか?答えとしてそれを選択します:) – Volte

関連する問題