2014-01-16 25 views
3

我正在使用Restangular与Mongolab连接。我想使用以下代码推送更新:

var theData = {"$push":{exercises :{type: "running"}}}; 
Restangular.all('employees').one(user._id.$oid).customPUT(theData ,null, {apiKey: apiKey}); 

当我运行这个并查看XHR请求时,有效负载始终设置为{}。

但是,如果我拉出$,我的有效载荷是这样的:

{"push":{exercises :{type: "running"}}} 

在这种情况下,有效载荷看起来不错,但mongolab以为我想添加一个名为“推”场而不是推送到excercises数组,因为我没有使用“$ push”关键字。

我可以在字符串的任何地方除了前面有“$”(例如“$ push”和“push $”工作),但不幸的是,这是mongo推动更新所需要的。是否有一些设置,我错过了,或者这是一个错综复杂的错误?

回答

3

肯定的,$将条纹:

@name angular.toJson

@function

@description:之前的数据发送,数据将与angular.toJson功能转化

将输入序列化为JSON格式的字符串。具有前导$字符的属性将被剥离 ,因为角度在内部使用此标记。

如果你不想要这种行为,你必须提供一个transformRequest函数(http://docs.angularjs.org/api/ng.$http)。如果您的数据已经是json,您可能只需编写:

transformRequest: function(data){ 
    return data; 
} 

transformRequest必须在资源配置期间作为选项提供。见
http://docs.angularjs.org/api/ngResource.$resource

+0

这是正确...它看起来像有问题的代码是在[角源(https://github.com/angular/angular.js/blob/834d316829afdd0cc6a680f47d4c9b691edcc989/src/Angular.js #L908)。由于它只在对象上去掉,所以如果我在JSON.stringify()中自己将它添加到放置请求之前,我自己将其进行了字符串化,那么它就不会有任何问题。感谢您指点我正确的方向。 – jloosli