在angularjs中使用$ resource调用save不会传递复杂对象

时间:2014-02-23 01:47:51

标签: javascript angularjs

我在$ resource的保存中传递复杂对象时遇到问题。它正在剥离嵌套对象。 Angular 1.2.6。

例如,我定义了一个服务:

services.factory(
    'DocumentService', 
    [
        '$resource',
        function($resource) {
            return  $resource(
                    '/app/rest/document/:id?user=:user', 
                    {
                        id: "@id", 
                        user: "@user"
                    }, 
                    {}
            );
        }
     ]
);

我传入文档服务并获取文档。成功后它将被纳入范围。

DS.get(
    {id : documentId, user: $scope.user},

    function(data) {
        $scope.document = data;
    }
);

我添加了一个表示文档已被编辑的对象:

$scope.document.documentEdit = {
    user : $scope.user,
    editAction : "update"
};

和另一个领域:

$scope.document.testField = "this goes down";

当我拨打以下任何一种电话时:

$scope.document.$save({id : documentId, user: $scope.user});
DS.save({id : documentId, user: $scope.user}, $scope.document);

“testField”被序列化并发布,但“documentEdit”字段没有。有趣的是,如果我做以下事情:

DS.save({id : documentId, user: $scope.user}, angular.toJson($scope.document));

有效;这两个字段都被发送了。

我错过了什么?

我通过angular-resource.js中的角度代码。有一部分代码:

var serverRequest = function(config) {

    headers = config.headers;
    var reqData = transformData(config.data, headersGetter(headers), config.transformRequest);

    // strip content-type if data is undefined
    if (isUndefined(config.data)) {
      forEach(headers, function(value, header) {
        if (lowercase(header) === 'content-type') {
            delete headers[header];
        }
      });
    }

    if (isUndefined(config.withCredentials) && !isUndefined(defaults.withCredentials)) {
      config.withCredentials = defaults.withCredentials;
    }

    // send request
    return sendReq(config, reqData, headers).then(transformResponse, transformResponse);
};

var chain = [serverRequest, undefined];
var promise = $q.when(config);

当它命中serverRequest时,documentEdit已被过滤掉。

0 个答案:

没有答案