2014-01-05 8 views
5

Ich versuche PUT zu den Standardmethoden in ng-resource hinzuzufügen. Bisher geändert ich die DEFAULT_ACTIONS zu:Hinzufügen von PUT zu den Standard-NG-Ressourcenaktionen in AngularJS

var DEFAULT_ACTIONS = { 
     'get': {method:'GET'}, 
     'save': {method:'POST'}, 
     'update': {method:'PUT'}, 
     'query': {method:'GET', isArray:true}, 
     'remove': {method:'DELETE'}, 
     'delete': {method:'DELETE'} 
    }; 

Aber das fühlt sich sehr hacky und offensichtlich nicht bestehen bleiben, wenn ich das Modul aktualisieren. Gibt es eine Möglichkeit, dass ich update/puts zu allen ng-resource Objekten hinzufügen kann, die mit Updates behaftet sind?

Antwort

6

Die einzige einfache Weise, die ich sehen kann, ist einen Wrapper um $ Ressource zu erstellen:

module.factory('$myResource', ['$resource', function($resource){ 
    return function(url, paramDefaults, actions){ 
    var MY_ACTIONS = { 
     'update': {method:'PUT'} 
    }; 
    actions = angular.extend({}, MY_ACTIONS , actions); 
    return $resource(url, paramDefaults, actions); 
    } 
}]); 
+0

Und dann myResouce Ressource statt $ $ verwenden, Ich gehe davon aus? –

+0

Ja, dann benutze $ myResource, aber die API bleibt gleich –

+3

Warum ist es nicht schon standardmäßig? – Magne

11

Eine weitere Option ist der $ resourceProvider zu konfigurieren. Dies wirkt sich auf ALLE $ Ressourcen aus und Sie müssen diesen Code wahrscheinlich ebenfalls in Ihre Tests einbeziehen.

// Config the $resourceProvider 
app.config(["$resourceProvider",function ($resourceProvider) { 

    // extend the default actions 
    angular.extend($resourceProvider.defaults.actions,{ 

    // put your defaults here 
    query : { 
     method : "GET", 
     isArray : false, 
     transformResponse : function (data) { 
     // my data is wrapped in an object under the property "results" 
     return angular.fromJson(data).results; 
     } 
    } 

    }); 
}]); 
+1

Dies sollte die akzeptierte Antwort sein – timbrown

2

In der Anwendungskonfiguration Funktion, die $ resourceProvider fertigen Sie Ihren eigenen Satz von http Aktionen Parameter zu schreiben, einfach so:

angular.module('app') 
      .config(configureResourceProvider); 

    function configureResourceProvider($resourceProvider){ 

    // Provide your own set of actions on $resource factory. 
    // The following comments are Angular's default actions which are being 
    // replaced by your customized set that includes a PUT method. 
    //{ 'get': {method:'GET'}, 
    // 'save': {method:'POST'}, 
    // 'query': {method:'GET', isArray:true}, 
    // 'remove': {method:'DELETE'}, 
    // 'delete': {method:'DELETE'} }; 

    $resourceProvider.defaults.actions = { 
     create: {method: 'POST'}, 
     save: {method: 'POST'}, 
     update: {method: 'PUT'}, 
     get: {method: 'GET'}, 
     query: {method: 'GET', isArray:true}, 
     remove: {method: 'DELETE'}, 
     delete: {method: 'DELETE'} 
    }; 

    // Of course, you can customize other parameters too, like: 
    // Don't strip trailing slashes from calculated URLs 
    $resourceProvider.defaults.stripTrailingSlashes = false; 
} 
2
app.config([ "$resourceProvider", function($resourceProvider) { 

    $resourceProvider.defaults.actions['update'] = { method: 'PUT', params: { id: '@id' }, isArray: false } 

}]);