8

我有一个基本的角度资源(角度 1.0.7):

app.factory "User", [ "$resource", ($resource)->
  $resource "/users/:id", { id: '@id' }, {
    index:     { method: 'GET', isArray: false }
  }
]

我可以传递如下参数:

User.index({ foo: 1, bar: 2 })

但我需要传递嵌套参数:

User.index({ foo: { bar: 1 } })

这失败了,因为它发送:

/users?foo=%5Bobject+Object%5D

我试过了:

User.index({ foo: JSON.stringify({ bar: 1 }) })

但显然,服务器端无法识别参数(仅仅是字符串),我想避免在那里解析的麻烦。

你对这个问题有一个优雅的解决方案吗?


使用 jQuery 我已经完成了:

$.get("/users", { foo: { bar: 1 } } )

生产:

/users?foo%5Bbar%5D=1

由服务器完美解释。


似乎是一个已知问题这里也是),让我们从现在开始坚持一个丑陋的补丁......

4

1 回答 1

3

不像 Angular 的变化那么优雅,但你应该能够通过使用函数的结果设置你的参数来解决这个问题:

User.index.get({ "foo": (function () { 
    return JSON.stringify({ bar: 1 });
})() } );

产生类似于您正在寻找的 HTTP 请求:

?foo=%7B%22bar%22:1%7D

整个角度示例:

var app = angular.module('myApp', ['ngResource']);
var restUrl = window.location + 'echo/json/';

app.factory('User', function($resource, $http){
    return {
        index: $resource(restUrl)
    }               
});

function RestCtrl($scope, User) {
    $scope.url = restUrl;
    User.index.get({ "foo": (function () { 
        return JSON.stringify({ bar: 1 });
    })() } );
}

http://jsfiddle.net/pherris/U8F8G/6/

于 2013-09-25T19:09:45.013 回答