是否可以通过角度资源发送一个对象的一部分?

时间:2015-03-04 16:51:58

标签: angularjs

我有一个资源,其中get正在接收像{metadata : {}, data : {}}这样的对象。但是当我保存时,我只想发送数据而不是元数据。

    .factory("$profile", function($resource) {
        return $resource("service/profile/:profileid");
    })
    .controller('ProfileController', function($scope, $routeParams, $profile) {
        $scope.profile = new $profile();
        $scope.doSave = function() {

            // need to send profile.data only               << ----------

            $scope.profile.$save($routeParams, function(data) {
                console.log("saved profile");
            });
        }

我现在所做的是以下内容:

    .controller('ProfileController', function($scope, $routeParams, $profile) {
        $scope.profile = new $profile();
        $scope.doSave = function() {

            $scope.profile.data.$save = $scope.profile.$save;

            $scope.profile.data.$save($routeParams, function(data) {
                console.log("saved profile");
            });
        }

这有效,但我确信有一种更清洁的方式可以做我需要做的事情。理想情况下,我会告诉资源在“save”上查找数据属性。

1 个答案:

答案 0 :(得分:0)

是的,你可以这样做。您需要的属性是'transformResponse'(在GET上)和'transformRequest'(在Post上)。

.factory("$profile", function($resource) {
  return $resource("service/profile/:profileid",
    {},
    {
      get: {
        method: 'GET',
        transformResponse: function(response, headers){
          return response.data;
        }
      },
      post: {
        method: 'POST',
        transformRequest: function (request, headers) {
            var result = request.data; // << This line might not be exactly what you need.
            return result;
        }
      }
    });
})

我实际上怀疑根本不需要transformRequest部分(但你确实要求它)。

$scope.profile.$save($routeParams, function(data) {
  console.log("saved profile");
});