我已经创建了这样的服务:
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()
而不是$resource.$save()
。
我查看了https://docs.angularjs.org/api/ngResource/service/ $资源,我认为关键是要覆盖transformRequest
方法或使用{{1}}。关于任何一个的文档都缺乏。
答案 0 :(得分:0)
我已使用$http.post
来解决此问题,因此我可以控制任何参数。
也许这不是一个好方法,但它有效。
答案 1 :(得分: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.
});
});
<强>更新强>
app.config(function($httpProvider) {
$httpProvider.defaults.transformRequest = function(data){
//do something here
}
});
答案 2 :(得分: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;
});