【发布时间】:2017-02-08 03:40:51
【问题描述】:
我正在尝试将所有对 Rails 后端进行 api 调用的服务整合为一个。这是它的样子:
angular.module('feeSuitesApp')
.factory('FeeSuitesSvc', [
'$http',
function ($http) {
var TransformInstance, Result;
TransformInstance = function(FeeObj, obj){
return new FeeObj(obj);
};
Result = function(feeSuiteObj){
var servicePlural = feeSuiteObj.service + 's';
return $http({
method: feeSuiteObj.method,
url: feeSuiteObj.url,
params: feeSuiteObj.params,
transformResponse: function(data){
var w = angular.fromJson(data);
angular.forEach(w[servicePlural], function(obj, idx){
w[servicePlural][idx] = TransformInstance(feeSuiteObj.feeObj, obj);
});
return w;
}
})
}
return {
promise: Result,
};
}]);
POST 和 GET 工作正常,但 PUT 给了我一个 RangeError: Maximum call stack size exceeded
FeeRule 看起来像这样:
angular.module('feeSuitesApp')
.factory('FeeRule', function(){
//constructor
var FeeRule = function(obj){
this.id = obj.id || null;
this.name = obj.name || '';
this.fee_suite_id = obj.fee_suite_id || null;
this.fee_parameter_id = obj.fee_parameter_id || null;
this.multiplier = obj.multiplier || 1;
this.addend = obj.addend || 0;
};
return FeeRule;
});
但是,如果我进行以下调用,一切正常:
var url = '/api/v3/fee_rules/' + feeRule.id;
$http.put(url, { fee_rule: feeRule});
但如果我像这样使用我的服务,我会收到堆栈溢出错误:
var feeSuiteObj = {
url: '/api/v3/fee_rules/' + feeRule.id,
service: 'fee_rule',
method: 'PUT',
params: {
fee_rule: feeRule
},
feeObj: FeeRule
};
FeeSuitesSvc.promise(feeSuiteObj).then(function(success){
$state.go('root');
},function(error){
console.log(error);
});
【问题讨论】:
-
service和feeobj是什么,data在哪里?对象与文档不匹配。params != data -
根据您的错误 (RangeError) 我猜您的问题是从这里提出的:“angular.forEach(w[servicePlural]”。查看更多stackoverflow.com/a/22123896/335905
-
仅供参考,但您可以使用 $resource 库进行整合。在我的工作项目中,我们有如下构造的 api 调用,我们可以调用 GET、POST、PUT。 function deleteTnApi($resource) { return $resource('/:api/orderNumber/:someNumber/orderVersion/:version', null, { 'update': {method: 'PUT'} });
标签: angularjs