我通过 $http.post 将模型发送到服务器,但是,必须删除空日期,必须将 id 转换为 int,在浮点值中,逗号必须替换为点。这些是服务器端json api的限制,所以我正在寻找一种修改$http请求的方法。复杂的部分是修改规则依赖于一个api方法名,它本身就是request的一部分。
最直接的方法是在 $http.post 之前声明一个修改函数并将模型传递给该函数
$scope.method1Adapter = function(model) {
var data = angular.copy(model);
// 30 lines of modification code
return data;
};
$http.post("/api", {method: "method1", "data": $scope.method1Adapter($scope.data)})
但我认为这有点意大利面。
更好的方法是获取方法名称并返回适配器回调的工厂。
coreApp.factory("httpAdapter", function() {
return {
get: function (method) {
if (method == 'method1') {
return function (model) {
var data = angular.copy(model);
// modifications
return data;
}
} else {
return function (model) {
return model;
}
}
}
}
});
所以我可以将它添加到 $httpProvider.defaults.transformRequest 回调链
coreApp.config(function($httpProvider, httpAdapterProvider) {
$httpProvider.defaults.transformRequest.unshift(function(post) {
if (post && post.data && post.data) {
post.data = httpAdapterProvider.$get().get(post.method)(post.method);
}
})
});
我仍然不喜欢这样,因为我的应用程序的 api 有 16 种方法,并且需要 5 个适配器,大约 100 行代码难以维护。
关于更干净整洁的解决方案的任何想法?谢谢你。