2014-12-08 2 views
1

나는과 같이 서비스를 만든 : 내 컨트롤러에서

fbApp.factory('Post', ['$resource', 
function ($resource) { 
    return $resource('posts/:postId', {}, { 
     query: {method: 'GET', params: {postId: 'index'}, isArray: true} 
    }); 
}]); 

내가 새로운 그래서 같은 게시물 절약하고 있습니다 :

var postData = angular.copy($scope.formData); 
postData.published = $filter('date')($scope.formData.published, 'yyyy-MM-dd HH:mm:ss', 'UTC'); 
var post = new Post({Post:postData}); 
post.$save(); 

을 나는 서비스의 저장 방법을 변경하려는 대신 new Post({Post:postData}).$save() 내가 할 수있는 그렇게 단순히 new Post(postData).$save()을하십시오. https://docs.angularjs.org/api/ngResource/service/ $ 리소스를 살펴본 결과 $resource.$save() 메서드를 재정의하거나 transformRequest을 사용하는 것이 핵심이라고 생각합니다. 둘 중 하나에 관한 문서가 부족합니다.

+0

는) (저장 ' – charlietfl

+0

@downvoter downvote에 대한 이유를 명시 해주십시오'의 인수로 데이터를 전달할 수 있도록 다른 사람들은 –

+0

의 이점을 누릴 수 있지만 그 방법을 재정의 할 수있는 방법에 대한 질문에는 대답하지 않습니다. –

답변

0

save 메소드를 사용하면 사용자 정의 데이터를 요청에 전달할 수 있습니다.

angular.module('myApp').factory('myFactory', function($resource){ 
    return $resource ('api/comments/'); 
}); 

angular.module('myApp').controller('myController', function($scope, myFactory){ 
    $scope.myData = 'some data'; 

    myFactory.save($scope.myData, function(){ 
     //do something useful. 
    }); 
}); 

UPDATE

app.config(function($httpProvider) { 

$httpProvider.defaults.transformRequest = function(data){ 
    //do something here 
} 

}); 
+0

이것은 작동 할 것이지만 사용하기에 매우 건조하지는 않다. 재사용 할 수없는 기능은 언제 어디서나 저장해야합니다. 따라서 필자가 원하는 것은 데이터의 필요한 변환을 서비스로 옮기는 것입니다. 그래서 내가 저장 함수를 재정의하는 데 도움을 요청하거나 질문에서 언급 한 다른 2 개의 문서화되지 않은 메서드에 대해 설명합니다. –

+0

나는 그것을 얻었는지 모르지만 모든 요청에 ​​대해 동일한 작업을 수행해야하는 경우 $ httpProvider와 함께 trasnformRequest를 사용해야합니다. –

+1

업데이트가 작동 함 –

0

모든 매개 변수를 제어 할 수 있도록이 문제를 해결하기 위해 $http.post을 사용했습니다.

어쩌면 좋은 방법은 아니지만 작동합니다.

+0

나는 그것을 고맙게 생각하지만 $ 리소스 서비스를 통해 어떻게 수행되는지 명확히하고있다. –

+3

는'$ resource'을 사용하는 목적을 무효로한다. – charlietfl

0

또 다른 해결책은 다음과 같습니다

angular.module('app') 
.service('Post', function($resource, $q, $http){ 
    const r = $resource(`${baseUrl}api/post/:id`, {id: '@id'}); 

    // this will override the default save method 
    r.save = (data) => { 
    // do whatever with data 
    const d = $q.defer(); 
    $http.put(`${baseUrl}api/post/`, data) 
    .then(res => { 
    d.resolve(res.data); 
    }) 
    .catch(err => { 
    d.reject(err) 
    }); 

    // return the same promise format as $resource 
    return {$promise: d.promise}; 
    }; 

    return r; 
});