AngularJS 1.2.0 $资源PUT / POST / DELETE不发送整个对象

时间:2013-11-02 09:45:32

标签: javascript angularjs xmlhttprequest

我正在使用angularjs 1.2.0和$ resource。我想有一些PUT / POST实例操作不会将整个对象发送到服务器但只有一些字段,在某些情况下完全没有数据。

有可能吗?我到处搜索但找不到任何东西

更新

DELETE请求也会发生这种情况:

鉴于此代码:

group.$deleteChatMessage({messageId: message.id}, function(){
    var i = _.indexOf(group.chat, message);
    if(i !== -1) group.chat.splice(i, 1);
});

请求是这样的:

enter image description here

查看整个模型的发送方式(在“请求有效负载”下)。

这是资源:

    var Group = $resource(API_URL + '/api/v1/groups/:gid',
      {gid:'@_id', messageId: '@_messageId'},
      {
        deleteChatMessage: {method: "DELETE", url: API_URL + '/api/v1/groups/:gid/chat/:messageId'},
      });

2 个答案:

答案 0 :(得分:3)

这对我有用:

$resource(SERVER_URL + 'profile.json',
{},
{
    changePassword :
    {
        method : 'POST',
        url : SERVER_URL + 'profile/changePassword.json',

        // Don't sent request body
        transformRequest : function(data, headersGetter)
        {
            return '';
        }
    }
});

您可以通过在transformRequest函数中实现自己的代码来自定义exaclty发送到服务器的内容。在我的示例中,我向REST客户端添加了一个新函数,但您也可以覆盖现有函数。请注意,'transformRequest'仅适用于版本1.1 +

答案 1 :(得分:0)

您可以专门使用$ http。但是,我有一个案例,我用于一个可能有用的项目。我的例子也是从服务器返回一个数组,但你可以改变它。

在我的服务中:

app.factory('mySearch', ['$resource', function($resource) {
    return $resource('/api/items/:action', {}, {
        search: { method: 'POST', isArray: true,
            params: { action: 'search' }
        }
    });
}
]);

在我的控制器中:

我可以建立自定义参数来发布到服务器,或者如果我只需要用户选择的表行中的两个字段。

        var one = "field_one";
        var two =  "field_two";
        $scope.search({one: one, two: two});

然后我可以通过一个事件发布这些并传递自定义参数

    $scope.search = function(customParams) {
    mySearch.search({query: customParams}, function(data) {
        $scope.items = data;

    }, function(response) {
        console.log("Error: " + response.status);
    })
};

希望这是一些帮助。让我知道这是否接近你所寻求的,我可以提供更多帮助。

POST enter image description here

DELETE enter image description here