2013-09-03 19 views
6

Mam podstawowy zasób kątową (kątowe 1.0.7):zagnieżdżone parametry zapytania kątowej

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

mogę przekazać parametry jak:

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

ale muszę przechodzić zagnieżdżone parametry:

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

I to nie dlatego, że wysyła:

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

Próbowałem:

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

ale oczywiście parametry nie są ujmowane po stronie serwera (zwykłą strings) i chciałbym, aby uniknąć kłopotów z parsowania tam.

Czy masz eleganckie rozwiązanie tego problemu?


z jQuery bym zrobił:

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

Produkcja:

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

Idealnie interpretowane przez serwer.


Wydaje like a known issue (here too), trzymajmy się brzydkie łaty od teraz ...

+0

Dlaczego chcesz przekazać zagnieżdżone parametry? – Chandermani

+9

Naprawdę pytasz mnie, dlaczego zadaję moje pytanie? – apneadiving

+0

Po prostu pytam, dlaczego obiekt zagnieżdżony jest wymagany do operacji GET :) Rozumiem to dla POST – Chandermani

Odpowiedz

3

Nie tak eleganckie, jak zbliża się do zmiany kątowe ale powinieneś być w stanie rozwiązać ten problem, ustawiając z param wyniki funkcji:

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

Skutkuje to żądanie HTTP podobny do tego, czego szukasz:

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

Cały kątowe przykład:

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/