2016-09-29 51 views
-1

我想巩固所有我的服务,使api调用的Rails后端成一体。这里是什么样子:

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做工精细,而是把给了我一个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}); 

但如果我使用我这样的服务,我得到t他堆栈溢出错误:

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); 
    }); 
+0

什么是'service'和'feeobj'和在哪里'data'?对象与文档不匹配。 'params!= data' – charlietfl

+0

根据你的错误(RangeError)我猜你的问题是从这里提出的:“angular.forEach(w [servicePlural],”。更多http://stackoverflow.com/a/22123896/ 335905 – celerno

+0

只是一个fyi,但你可以使用$ resource库进行合并,在我的项目中,我们有如下的API调用,我们可以调用GET,POST,PUT。资源('/:api/orderNumber /:someNumber/orderVersion /:version',null,{ 'update':{method:'PUT'} }); – Ronald91

回答

0

看到https://docs.angularjs.org/api/ng/service/ $ HTTP#使用,没有服务也不feeObj配置属性,也PARAMS用于串行数据追加到GET请求(不是PUT)。所以,试试这个:

var feeSuiteObj = { 
    url: '/api/v3/fee_rules/' + feeRule.id, 
    method: 'PUT', 
    data: { 
    fee_rule: feeRule 
    } 
}; 

,如果你需要传递服务feeObj,可以将数据对象中做到这一点:

data: { 
    fee_rule: feeRule, 
    service: 'fee_rule', 
    feeObj: FeeRule 
}