2015-09-29 14 views
6

Sfortunatamente, siamo bloccati in esecuzione 1.2.26 (aggiorneremo alla 1.2.28 quando è gemified).

Nel frattempo, come posso applicare una patch (heh) $ http in modo che sia disponibile il metodo a mano breve patch? Sono abbastanza nuovo per l'intero servizio/fabbrica/cosa del modulo. Ho fatto ore di ricerche e non riesco a capirlo.

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

sopra è la migliore che ho ... e non fa nulla XD

+0

patch è già avaible: https://code.angularjs.org/1.2.27/docs/api/ng/service/$http#patch – Fals

+0

1.2.27 non è gemified ancora :) voglio solo patch questo un po 'contro il tutto. – Volte

risposta

3

Il module.decorator è stato aggiunto all'API del modulo nella versione 1.4. Ecco perché non funziona in 1.2.x.

Si prega di trovare sotto una demo di lavoro o qui a jsfiddle.

Mi ci è voluto un po 'per implementare il metodo patch perché mi mancava restituire la promessa di $http. Ma ora dovrebbe funzionare.

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

Confermato il funzionamento. Grazie compagno! – Volte

4

Si può fare questo con un decoratore angolare.

Un decoratore di servizi intercetta la creazione di un servizio, consentendo di ignorare o modificare il comportamento del servizio. L'oggetto restituito dal decoratore può essere il servizio originale o un nuovo oggetto servizio che sostituisce o avvolge e delega al servizio originale. Per ulteriori informazioni è possibile controllare angolare documentation.

Esempio:

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(); 
}); 

È possibile mantenere questo decoratore fino a quando si esegue l'aggiornamento a una versione più recente e non solo in modo sicuro eliminarlo.

+0

Questo è sorprendente. Grazie, sei veloce! :) – Volte

+0

Non riesco a capire quando/dove eseguire questo codice. Non sembra che trovi l'istanza della mia app. – Volte

+0

Ok, l'ho capito. Ho dovuto usare il blocco di configurazione. Vuoi aggiornare la tua risposta per mostrarla e poi la selezionerò come risposta :) – Volte

Problemi correlati